3.2.12. Satrlarni bo`laklash Satrdan so`zlarni ajratibolish masalasiga tez-tez duch kelamiz. So`zlar satrda bo`sh joylar (probellar) bilan ajratilgandeb tasavvur qilamiz. Biz bu masalani yechish uchun yuqoridagi qismda ta’kidlaganimizdek,stringstreamsinfidan foydalanishimiz mumkin. 3.1-kodli ro`yxatda so`zlarni satrdan ajratibolishva ularni alohida satrlarda chiqarish jarayoni keltirilgan.
3.1-kodli ro`yxat. ExtractWords.cpp 1 #include 2 #include 3 #include 4 using namespace std;
5
6 int main()
7 {
8 string text("Dasturlash qiziqarli!");
9 stringstream ss(matn);
10
11 cout << "Matndagi so`zlar: " << endl;
12 string word;
13 while (!ss.eof())
14 {
15 ss >> word;
16 cout << word << endl;
17 }
18
19 return 0;
20 }
Matndagi so`zlar:
Dasturlash
qiziqarli!
Dastur matn satri (9-qator) uchun stringstream ob’yekt yaratadi va bu ob’yektdan kiruvchi oqim sifatida konsoldan ma’lumotni o`qish uchun foydalanish mumkin. U satr oqimidan ma’lumotlarni olib word satr ob’yektiga yuboradi (15-qator). stringstream sinfidagi eof() funksiyasi satrli oqimdagi barcha elementlar o`qilganda trueqiymat qaytaradi (13-qator).
3.2.13. Amaliy qism: Satrlarni almashtirish Ushbu qismda s satrda mavjud bo`lgan oldSubStr ichki satr tarkibiga kiruvchi satrni newSubStr satr bilan almashtiruvchi funksiya yozamiz.
boolreplaceString(string& s, const string& oldSubStr,
conststring& newSubStr)
Agar s satr o`zgargan bo`lsa, funksiya true, aks holda, false qiymat qaytaradi. 3.2-kodli ro`yxatda uning dasturi keltirilgan.
3.2-kodli ro`yxat. SatrniAlmashtirish.cpp 1#include 2#include 3usingnamespacestd;
4
5// s daoldSubStrninewSubStr ga almashtirish
6boolreplaceString(string&s,conststring&oldSubStr,
7conststring&newSubStr);
8
9intmain()
10 {
11//Foydalanuvchinis,oldSubStrvanewSubStr ni kiritishga undash
12cout<<"s,oldSubStr,vanewSubStr satrlarni kiriting:";
13strings,oldSubStr,newSubStr;
14cin>>s>>oldSubStr>>newSubStr;
15
16boolisReplaced=replaceString(s,oldSubStr,newSubStr);
17
18if(isReplaced)
19cout<<"Almashtirilgan satr:"<20else
21cout<<"Moslik yo`q"<22
23 return0;
24 }
25
26 boolreplaceString(string&s,conststring&oldSubStr,
27 conststring&newSubStr)
28 {
29boolisReplaced=false;
30intcurrentPosition=0;
31while(currentPosition32{
33intposition=s.find(oldSubStr,currentPosition);
34if(position==string::npos)// Boshqa moslik yo`q
35returnisReplaced;
36else
37{
38s.replace(position,oldSubStr.length(),newSubStr);
39currentPosition=position+newSubStr.length();
40isReplaced=true;//Hech bo`lmaganda bitta moslik
41}
42}
43
44returnisReplaced;
45 }
Natija:
s, oldSubStr, va newSubStr satrlarni kiriting:abcdabab ab AAA
Almashtirilgan satr: AAAcdAAAAAA
s, oldSubStr, va newSubStr satrlarni kiriting:abcdabab gb AAA
Moslik yo`q
Dastur foydalanuvchini satrni, oldingi ichki satrni va yangi ichki satrni kiritishga undaydi (14-qator). Dastur eski satrning barcha tarkibiy elementlarini yangi ichki satrning barcha tarkibiy elementlari bilan almashtiruvchi (16-qator)va bu jarayonning amalga oshirilganlik holati bo`yicha xabar beruvchi (18-21-qatorlar)repalceString funksiyasini chaqiradi.
replaceString funksiyasi s satrdan oldSubStr ni currentPosition dan, ya’ni 0 dan boshlab qidiradi.string sinfidagi find funksiyasi satr tarkibidagi ichki satrni qidirish uchun ishlatiladi (33-qator). Agar utopilmasa, string::nposni qaytaradi. Bunday vaziyatda qidirish to`xtatiladi va funksiya isReplaced ni qaytaradi (35-qator). isReplaced – bool o`zgaruvchi hisoblanib, uning boshlang`ich qiymati false hiosblanadi (29-qator). Qachonki, ichki satrga moslik aniqlanganida unga true qiymati ta’minlanadi (40-qator).
Funksiya almashtirish funksiyasidan foydalanib, qaytadan ichki satrni qidiradi, uni yangi ichki satr bilan almashtiradi (38-qator) va satrda keying moslikni topish uchun joriy qidiruv joyini qayta o`rnatadi (39-qator).