সমস্যা বিবরণ
একটি মডিউল ডিজাইন করতে হবে যা স্ট্রিং-এর শুরুতে থাকা হোয়াইটস্পেস ক্যারেক্টারগুলো বাদ দিয়ে প্রথম নন-হোয়াইটস্পেস ক্যারেক্টার খুঁজে বের করবে। তারপর ঐ ক্যারেক্টার থেকে শুরু করে অপশনাল প্লাস/মাইনাস চিহ্ন এবং সংখ্যাসূচক ডিজিটগুলো পড়ে একটি সংখ্যাগত মান হিসেবে ইন্টারপ্রেট করবে।
যদি প্রথম নন-হোয়াইটস্পেস ক্যারেক্টারগুলো বৈধ ইন্টিজার না হয়, বা স্ট্রিং খালি/শুধু হোয়াইটস্পেস হয়, তবে কোনো কনভার্সন হবে না।
উদাহরণ: ইনপুট "-45" হলে আউটপুট -45।
সমাধানের ধাপসমূহ
- sign := 1, base := 0, i := 0, n := স্ট্রিং এর সাইজ
- যখন i < n এবং s[i] হোয়াইটস্পেস, i++ করুন।
- প্রথম ক্যারেক্টার '-' হলে sign := -1, অন্যথায় sign := 1
- যখন s[i] '0' থেকে '9' এর মধ্যে:
- প্রতিটি ক্যারেক্টার পড়ে ইন্টিজারে কনভার্ট করুন এবং base ক্যালকুলেট করুন।
- বেস * সাইন রিটার্ন করুন।
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;
else return INT_MIN;
}
base = (base * 10) + (str[i++] - '0');
}
return base * sign;
}
};
int main() {
Solution ob;
cout << ob.myAtoi("-45") << endl;
cout << ob.myAtoi(" 56") << endl;
cout << ob.myAtoi("100") << endl;
}
ইনপুট
"-45" " 56" "100"
আউটপুট
-45 56 100