bool isNumeric(string s){
if ( !s.empty() && s[0] != '-' )
s = "0" + s; //prepend 0
string garbage;
stringstream ss(s);
ss >> *(auto_ptr<double>(new double)) >> garbage;
/*
//the line above extracts the number into an anonymous variable. it could also be done like this:
double x;
ss >> x >> garbage;
*/
//if there is no garbage return true or else return false
return garbage.empty();
}
এটি কীভাবে কাজ করে:
স্ট্রিং স্ট্রিম >> ওভারলোড স্ট্রিং স্ট্রিম থেকে ধারাবাহিকভাবে অক্ষরগুলি পড়ার মাধ্যমে স্ট্রিং স্ট্রিমের (এসএসএস) অক্ষরগুলি না পড়ে বা পরবর্তী অক্ষর সংরক্ষণের মানদণ্ড পূরণ না করে স্ট্রিংগুলিকে বিভিন্ন গাণিতিক ধরণের রূপান্তর করতে পারে over গন্তব্য পরিবর্তনশীল প্রকারের মধ্যে।
example1:
stringstream ss("11");
double my_number;
ss >> my_number; //my number = 11
example2:
stringstream ss("011");
double my_number;
ss >> my_number; //my number = 11
example3:
stringstream ss("11ABCD");
double my_number;
ss >> my_number; //my number = 11 (even though there are letters after the 11)
"আবর্জনা" পরিবর্তনশীল ব্যাখ্যা ":
আমার ডাবলে এক্সট্রাকশনের কোনও কার্যকর মূল্য আছে কিনা তা কেন চেক করবেন না এবং তা যদি সত্য হয় তবে তা সত্য?
উদাহরণস্বরূপ বিজ্ঞপ্তি 3 এখনও ইনপুট স্ট্রিং "11ABCD" (যা একটি সংখ্যা নয়) এমনকি 11 নম্বরটি my_number ভেরিয়েবলটিতে সফলভাবে পড়বে।
এই কেসটি হ্যান্ডেল করতে আমরা স্ট্রিং ভেরিয়েবলে (যা আমি আবর্জনা নামকরণ করেছি) আরেকটি নিষ্কাশন করতে পারি যা প্রারম্ভিক এক্সট্রাকশনটির পরে স্ট্রিং বাফারটিতে ডাবল টাইপের মধ্যে ফেলে রাখা হতে পারে এমন কিছু পড়তে পারে। যদি কিছু ছেড়ে যায় তবে এটি "আবর্জনা" পড়তে হবে যার অর্থ পাস করা স্ট্রিংটি কোনও সংখ্যা ছিল না (এটি কেবল একটি দিয়ে শুরু হয়)। এই ক্ষেত্রে আমরা মিথ্যা ফিরতে চাই;
চাপ দেওয়া "0" ব্যাখ্যা ":
একটি একক অক্ষরকে দ্বিগুণে আনার চেষ্টা ব্যর্থ হবে (0 আমাদের ডাবলে ফিরে আসবে) তবে স্ট্রিং বাফার অবস্থানটি অক্ষরের পরে স্থানান্তরিত করবে। এই ক্ষেত্রে আমাদের আবর্জনা খালি খালি হবে যা ফাংশনটি ভুলভাবে সত্যে ফিরে আসবে। এটিকে ঘুরে দেখার জন্য আমি স্ট্রিংটিতে 0 টি প্রম্পেন্ড করে রেখেছিলাম যাতে উদাহরণস্বরূপ যদি স্ট্রিংটি "a" হয় তবে এটি "0a" এ পরিবর্তিত হয় যাতে 0 টি ডাবলকে বের করা হবে এবং "একটি" আবর্জনায় সরানো হবে।
0 প্রিফেন্ডিং সংখ্যার মানকে প্রভাবিত করবে না তাই সংখ্যাটি এখনও আমাদের ডাবল ভেরিয়েবলের মধ্যে সঠিকভাবে বের করা হবে।
if (expr) return true; return false;
! শুধু লিখুনreturn expr;
।