আমি ইতিমধ্যে বেশ কয়েকটি জিনিস চেষ্টা করেছি,
std::stringstream m;
m.empty();
m.clear();
উভয় কাজ করে না।
আমি ইতিমধ্যে বেশ কয়েকটি জিনিস চেষ্টা করেছি,
std::stringstream m;
m.empty();
m.clear();
উভয় কাজ করে না।
উত্তর:
সমস্ত স্ট্যান্ডার্ড লাইব্রেরির ধরণের জন্য সদস্য ফাংশনটি empty()
কোয়েরি, কোনও আদেশ নয়, এর অর্থ "আপনি কি খালি?" "দয়া করে আপনার সামগ্রীগুলি ফেলে দিন"।
clear()
সদস্য ফাংশন থেকে উত্তরাধিকারসূত্রে হয় ios
এবং যদি একটি ফাইল প্রবাহে ত্রুটি রাষ্ট্র সেট আছে স্ট্রিম, যেমন ত্রুটির রাষ্ট্র পরিষ্কার করতে ব্যবহার করা হয় eofbit
(শেষ অফ ফাইল), তারপর কলিং clear()
ত্রুটির রাষ্ট্র ফিরে সেট হবে goodbit
(কোন ত্রুটি) ।
ক এর বিষয়বস্তু সাফ করার জন্য stringstream
:
m.str("");
সঠিক, যদিও ব্যবহার:
m.str(std::string());
টেকনিক্যালি আরও দক্ষ, কারণ আপনি std::string
যে কনস্ট্রাক্টর লাগে সেটাই আপনি এড়িয়ে চলেন const char*
। তবে আজকাল যে কোনও সংকলক উভয় ক্ষেত্রেই একই কোড উত্পন্ন করতে সক্ষম হওয়া উচিত - তাই আমি কেবল আরও বেশি পাঠযোগ্য with
আপনি ত্রুটির অবস্থা সাফ করতে পারেন এবং স্ট্রিংস্ট্রিমটি সমস্ত এক লাইনে খালি করতে পারেন
std::stringstream().swap(m); // swap m with a default constructed stringstream
এটি কার্যকরভাবে একটি ডিফল্ট নির্মিত অবস্থায় পুনরায় সেট করে
m.str("");
কাজ মনে হচ্ছে।
সংকলক নির্বিশেষে এটি সবচেয়ে নির্ভরযোগ্য উপায় হওয়া উচিত:
m=std::stringstream();
mm.clear(); mm.str("");
জন্য কৌশলটি করেছিলেন did (কোনও সি ++ 11 নেই, অন্যথায় অদলবদল আরও ভাল হবে)।
swap
মুভ-অ্যাসাইনমেন্টের চেয়ে কেন ভাল হবে ?
আমার 2 সেন্ট:
এটি আমার জন্য এক্সকোড এবং দেব-সি ++ এ কাজ করেছিল বলে মনে হয়েছিল, আমার একটি মেনু আকারে একটি প্রোগ্রাম ছিল যে কোনও ব্যবহারকারীর অনুরোধ অনুসারে যদি পুনরাবৃত্তভাবে কার্যকর করা হয় তবে একটি স্ট্রিংস্ট্রিম ভেরিয়েবল পূরণ করবে যা প্রথমবারের মতো ঠিকঠাক কাজ করবে would চালান তবে পরের বার ব্যবহারকারী একই কোড চালাবেন স্ট্রিংস্ট্রিমটি সাফ করবেন না। তবে নীচের দুটি লাইনের কোডটি শেষ পর্যন্ত স্ট্রিং ভেরিয়েবলটি পূরণ করার আগে স্ট্রিংস্ট্রিম ভেরিয়েবলটি সাফ করে দিয়েছে। (2 ঘন্টা ট্রায়াল এবং ত্রুটি এবং গুগল অনুসন্ধানগুলি), বিটিডব্লিউ, প্রতিটি লাইন তাদের নিজেরাই ব্যবহার করে কৌশলটি চালায় না।
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
এটি একটি ধারণাগত সমস্যা।
স্ট্রিং স্ট্রিম একটি স্ট্রিম, সুতরাং এর পুনরুক্তিকারীরা এগিয়ে থাকে, ফিরে আসতে পারে না। একটি আউটপুট স্ট্রিং স্ট্রিমে, আপনার অন্য কোনও আউটপুট স্ট্রিমের মতো এটি পুনরায় পুনর্নির্মাণের জন্য আপনার একটি ফ্লাশ () প্রয়োজন।
এগুলি gnu c ++ এ স্ট্রিং স্ট্রিমে ডেটা ফেলে দেয় না
m.str("");
m.str() = "";
m.str(std::string());
নিম্নলিখিতটি আমার জন্য স্ট্রিংস্ট্রিমটি খালি করে:
m.str().clear();