مطمئنم با جریان های ورودی/خروجی در ++C آشنا هستید! اگر هم نیستید پس باید بگویم به طور کلی جریان ها یک سری کاراکتر ها هستند که دستگاه ها و حافظه های جانبی برای شما فراهم و یا از شما دریافت کنند. دو ویژگی برای جریان ها اهمیت دارد؛ اولی این که شما می توانید برای پردازش آن ها عملگرهایی داشته باشید، و دومی هم دسته بندی آن ها بر اساس دستگاه های مربوط به آن هاست. کنجکاو شده اید؟ بیشتر بخوانید!
در واقع جریان ها رشته هستند و رشته ها هم جریان هستند! هر دو دنباله ای از کاراکتر ها هستند اما ظاهر و نحوه دسترسی به آن ها متفاوت است. در رشته ها می توانیم به تک تک عتاصر دسترسی مستقیم داشته باشیم. اما در جریان باید به صورت یک دنباله کاملاً پیوسته تمام کاراکترا ها را دریافت یا ارسال کنیم. حالا ما در این مطلب می خواهیم جریانی را معرفی و استفاده کنیم که مقدار دهی آن نه در سطح سخت افزار بلکه در سطح برنامه نویسی انجام می شود. صحبت ما در مورد جریانِ رشته است!
با اضافه کردن
<sstream>
به برنامه خود می توانید جریان هایی از نوع
istringstream
برای جریان رشته ورودی،
ostringstream
برای جریان رشته خروجی و
stringstream
برای داشتن جریان رشته ای به عنوان ورودی و خروجی استفاده کنید. در ادامه با مثال هایی مقدار دهی و ویژگی های یک جریان رشته ورودی/خروجی را بررسی می کنیم.
تعریف یک جریان رشته چه ورودی باشد یا خروجی چه هر دو تقریباً مشابه است.
شکل های تعریف یک جریان رشته:
// Input string stream stringstream myIStream1(ios::in); istringstream myIStream2; // Output string stream stringstream myOStream1(ios::out); ostringstream myOStream2; // Input/Output string stream stringstream myIOStream1(ios::in|ios::out); stringstream myIOStream2;
در هنگام تعریف جریان می توان آن را با استفاده از تابع سازنده اش مقدار دهی کرد. هر چند که بعد از تعریف، مقدار دهی این جریان یا خواندن از آن ها متناسب با این که از چه نوعی هستند (ورودی یا خروجی و یا هردو) می تواند با عملگر های
>>
و
<<
انجام شود. و البته در هر سه حالت این جریان ها یک method از قبل تعریف شده داریم که هم می تواند به جریان مقدار جدیدی بدهد یا بر مقدار آن اضافه کند و یا تمام مقدار فعلی آن را به صورت string برگرداند. در کد زیر از تمام حالت های ذکر شده مثال داریم!
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { string word; //-------------------------Input string stream stringstream myIStream1(ios::in); istringstream myIStream2("test2"); istringstream myIStream3; myIStream1.str("test1"); myIStream3.str("test3"); myIStream3 >> word; cout << "Input string streams: " << endl << "myIStream1: " << myIStream1.str() << endl << "myIStream2: " << myIStream2.str() << endl << "input from myIStream3: " << word << endl ; //-------------------------Output string stream stringstream myOStream1(ios::out); ostringstream myOStream2("test2"); ostringstream myOStream3; myOStream1.str("test1"); myOStream3 << "test3"; cout << endl << "Output string streams: " << endl << "myOStream1: " << myOStream1.str() << endl << "myOStream2: " << myOStream2.str() << endl << "output to myOStream3: " << myOStream3.str() << endl ; //-------------------------Input/Output string stream stringstream myIOStream1(ios::in | ios::out); stringstream myIOStream2("This is a test!"); myIOStream1 << "This is a test!"; myIOStream2 >> word; cout << endl << "Input/Output string streams: " << endl << "myIOStream1: " << myOStream1.str() << endl << "input from myIOStream2: " << word << endl ; return 0; }
می توانید در اینجا کد بالا را خودتان اجرا کنید و خروجی را ببینید! اما به هر حال خروجی به شکل زیر است.
حالا با مقدمات آشنا شده ایم؛ بیایید کاربرد دیگری را بررسی کنیم. با استفاده از تعریف عملگر ها برای جریان رشته می توانیم از آن اعداد را استخراج کنیم! در واقع به راحتی می توانیم اعداد داخل یک رشته را جدا کنیم و یا این که یک رشته عددی را فقط با یک جریان رشته به عدد تبدیل کنیم. مثال زیر موضوع را روشن می کند.
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { int intNumber; float floatNumber; string word; stringstream myStream("47 1.414 This is a test"); myStream >> intNumber >> floatNumber >> word; cout << intNumber << endl << floatNumber << endl << word ; return 0; }
این کد را هم می توانید در اینجا خودتان اجرا کنید و خروجی را ببینید! خروجی به شکل زیر است.
در آخر، از آن جا که فکر می کنم این مطلب جای کار بیشتری دارد، صمیمانه از شما خوانــنــدگــان گــرامـــی تقاضا می کنم سوال ها و پیشنهاد های خود را درباره مطلب جریان رشته ها در بخش نظرات، با ما مطرح کنید.