منبع اصلی نوشتار زیر در این لینک قرار دارد

جریان رشته (string stream) در ++C

مطمئنم با جریان های ورودی/خروجی در ++C آشنا هستید! اگر هم نیستید پس باید بگویم به طور کلی جریان ها یک سری کاراکتر ها هستند که دستگاه ها و حافظه های جانبی برای شما فراهم و یا از شما دریافت کنند. دو ویژگی برای جریان ها اهمیت دارد؛ اولی این که شما می توانید برای پردازش آن ها عملگرهایی داشته باشید، و دومی هم دسته بندی آن ها بر اساس دستگاه های مربوط به آن هاست. کنجکاو شده اید؟ بیشتر بخوانید!

در واقع جریان ها رشته هستند و رشته ها هم جریان هستند! هر دو دنباله ای از کاراکتر ها هستند اما ظاهر و نحوه دسترسی به آن ها متفاوت است. در رشته ها می توانیم به تک تک عتاصر دسترسی مستقیم داشته باشیم. اما در جریان باید به صورت یک دنباله کاملاً پیوسته تمام کاراکترا ها را دریافت یا ارسال کنیم. حالا ما در این مطلب می خواهیم جریانی را معرفی و استفاده کنیم که مقدار دهی آن نه در سطح سخت افزار بلکه در سطح برنامه نویسی انجام می شود. صحبت ما در مورد جریانِ رشته است!

stringstream

لایه های مختلف جریان های ورودی/خروجی در ++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;
}

می توانید در اینجا کد بالا را خودتان اجرا کنید و خروجی را ببینید! اما به هر حال خروجی به شکل زیر است.

test

 

حالا با مقدمات آشنا شده ایم؛ بیایید کاربرد دیگری را بررسی کنیم. با استفاده از تعریف عملگر ها برای جریان رشته می توانیم از آن اعداد را استخراج کنیم! در واقع به راحتی می توانیم اعداد داخل یک رشته را جدا کنیم و یا این که یک رشته عددی را فقط با یک جریان رشته به عدد تبدیل کنیم. مثال زیر موضوع را روشن می کند.

#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;
}

این کد را هم می توانید در اینجا خودتان اجرا کنید و خروجی را ببینید! خروجی به شکل زیر است.

extract numbers from string stream

 

در آخر، از آن جا که فکر می کنم این مطلب جای کار بیشتری دارد، صمیمانه از شما خوانــنــدگــان گــرامـــی تقاضا می کنم سوال ها و پیشنهاد های خود را درباره مطلب جریان رشته ها در بخش نظرات، با ما مطرح کنید.

Digg This  Reddit This  Stumble Now!  Buzz This  Vote on DZone  Share on Facebook  Bookmark this on Delicious  Kick It on DotNetKicks.com  Shout it  Share on LinkedIn  Bookmark this on Technorati  Post on Twitter  Google Buzz (aka. Google Reader)  



برچسب ها : ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد