मान लीजिए कि हमें एक मॉड्यूल डिजाइन करना है, जो पहले गैर-व्हाट्सएप वर्ण तक पहुंचने तक आवश्यक के रूप में कई व्हाइटस्पेस वर्णों को छोड़ देता है। उसके बाद, इस वर्ण से शुरू करते हुए, यह एक वैकल्पिक प्रारंभिक प्लस चिह्न या ऋण चिह्न लेता है जिसके बाद कई संख्यात्मक अंक होते हैं, और उन्हें संख्यात्मक मान के रूप में व्याख्या करते हैं।
जब str में गैर-व्हाट्सएप वर्णों का पहला अनुक्रम मान्य अभिन्न संख्या नहीं है, या जब ऐसा कोई क्रम मौजूद नहीं है क्योंकि या तो str खाली है या इसमें केवल सफेद स्थान हैं, तो कोई रूपांतरण नहीं किया जाएगा।
तो अगर इनपुट "-45" जैसा है, तो आउटपुट -45 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- चिह्न :=1, आधार :=0, i :=0, n :=स्ट्रिंग का आकार
- जबकि i
- यदि पहला अक्षर है - तो हस्ताक्षर करें:=-1, अन्यथा हस्ताक्षर करें:=1
- जबकि s[i] '0' से '9' की सीमा में
- प्रत्येक वर्ण को पढ़ें और उसे एक पूर्णांक में बदलें, फिर प्रत्येक वर्ण के लिए आधार बढ़ाकर आधार गणना समायोजित करें।
- नंबर वापस करें * चिह्न
उदाहरण(C++)
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int myAtoi(string str) { int sign = 1; int base = 0; int i = 0; int n = str.size(); while(i < n && str[i] == ' '){ i++; } if(str[i] == '-' || str[i] == '+') sign = 1 - 2*(str[i++] =='-'); while(str[i] >= '0' && str[i] <='9'){ if(base > INT_MAX/10 || base == INT_MAX/10 && str[i]- '0' > INT_MAX %10){ if(sign == 1)return INT_MAX; return INT_MIN; } base = (base * 10) + (str[i++] - '0'); } return base * sign; } }; main(){ Solution ob; cout << ob.myAtoi("-45")<<endl; cout << ob.myAtoi(" 56")<<endl; cout << ob.myAtoi("100")<<endl; }
इनपुट
"-45" " 56" "100"
आउटपुट
-45 56 100