কম্পিউটার টিউটোরিয়াল

C++-এ স্ট্রিং থেকে ইন্টিজার কনভার্সন (atoi)

সমস্যা বিবরণ

একটি মডিউল ডিজাইন করতে হবে যা স্ট্রিং-এর শুরুতে থাকা হোয়াইটস্পেস ক্যারেক্টারগুলো বাদ দিয়ে প্রথম নন-হোয়াইটস্পেস ক্যারেক্টার খুঁজে বের করবে। তারপর ঐ ক্যারেক্টার থেকে শুরু করে অপশনাল প্লাস/মাইনাস চিহ্ন এবং সংখ্যাসূচক ডিজিটগুলো পড়ে একটি সংখ্যাগত মান হিসেবে ইন্টারপ্রেট করবে।

যদি প্রথম নন-হোয়াইটস্পেস ক্যারেক্টারগুলো বৈধ ইন্টিজার না হয়, বা স্ট্রিং খালি/শুধু হোয়াইটস্পেস হয়, তবে কোনো কনভার্সন হবে না।

উদাহরণ: ইনপুট "-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
  1. C++-এ স্ট্রিং টোকেনাইজেশন: স্ট্রিম এবং getline() ব্যবহার

  2. C++-এ নম্বর স্ট্রিংকে ইন্টিজারে কনভার্ট করা

  3. C++-এ ইন্টিজারকে হেক্স স্ট্রিংএ কনভার্ট করা

  4. C++-এ স্ট্রিং টোকেনাইজ (Tokenize) করা