Presentation is loading. Please wait.

Presentation is loading. Please wait.

מחרוזות-String בשפת C++ ישנו תפקיד מיוחד למערך מסוג char רצף של תווים הנמצאים במערך מסוג char המסתיימת בתו אפס (הכוונה לאפס ממש '0\' , ולא לתו '0')

Similar presentations


Presentation on theme: "מחרוזות-String בשפת C++ ישנו תפקיד מיוחד למערך מסוג char רצף של תווים הנמצאים במערך מסוג char המסתיימת בתו אפס (הכוונה לאפס ממש '0\' , ולא לתו '0')"— Presentation transcript:

1 מחרוזות-String בשפת C++ ישנו תפקיד מיוחד למערך מסוג char רצף של תווים הנמצאים במערך מסוג char המסתיימת בתו אפס (הכוונה לאפס ממש '0\' , ולא לתו '0') משמשת ב- C++ כמחרוזת. '0\' -הוא סימון שכאן מסתיימת המחרוזת. המחרוזת לא חייבת לתפוס את כל המערך. '0\' הוא למעשה מוסכמה, על מנת שלא נהיה צריכים לשלוח לפונקציה את אורך המחרוזת .

2 char word[10]; זה מערך של תווים word[0] = ‘a’; עדיין
word[1] = ‘b’; עדיין word[2] = ‘a’; עדיין word[3] = ‘\0’; עכשיו אפשר להגיד שזו מחרוזת, וגם אפשר להגיד שזה מערך של תווים אפשר לעשות אותה פעולה ע"י char word[10] = “aba”; המהדר מסיק שמדובר במחרוזת ומוסיף אוטומטית את ה-0/ בסוף . a b \0 d F s z E

3 עוד דוגמה: #include <iostream> #include <string> using namespace std; void f1() { char str[20] = {'I',' ','L','o','v','e',' ','C','+','+','\0'}; cout<<str<<endl; cout << "size of char array is "<<strlen(str) << endl; } int main() f1(); return 0; בדוגמה זו רואים שלמרות שאורך המערך הוא 20 תווים, אורך המחרוזת רק 10. כדי להכיל את המחרוזת דרושים 11 מקומות ולא 10 כדי להכיל את האפס המסיים. נשאלת השאלה מה נמצא ב-9 המקומות האחרונים והתשובה היא, שלא ניתן לחזור כמו בכל מקום שלא אותחל. strlen-פונקציה שמחזירה גודל של מערך התווים..

4 cout << str << endl;
אתחול מחרוזות מכיוון שמחרוזות נפוצות כל כך הגדירו צורת אתחול מיוחדת. אתחול מחרוזת מתבצע על-ידי רשימה בתוך מירכאות. האפס המסיים (NULL) מוכנס באופן אוטומטי, למרות שלא נרשם. void f2() { char str[20] = "I Love C++"; cout << str << endl; cout << "size of char array is " << strlen(str) << endl; }

5 צורת אתחול נוספת אשר ניתן לבצע היא על-ידי השמה של כל איבר לחוד כמו במערך:
void f3() { char str[20]; str[0] = 'I'; str[1] = ' '; str[2] = 'L'; str[3] = 'o'; str[4] = 'v'; str[5] = 'e'; str[6] = ' '; str[7] = 'C'; str[8] = '+'; str[9] = '+'; str[10] = ' '; str[11] = '\0'; cout<<str<<endl; }

6 ספריית string בספרייה זו הוגדר טיפוס חדש של מחרוזת - string: #include <iostream> #include <string>  using namespace std; void f4() { string s1 = "To be or not to be"; cout<<"s1: "<<s1<<endl; string s2; cout << "enter string: "; cin>>s2; cout<<" s2: "<<s2<<endl; } int main() f4(); s1: To be or not to be enter string: i love c s2: i Press any key to continue . . .

7 בדוגמה זו רואים שפקודה cin קולטת רק את התווים עד רווח ראשון
בדוגמה זו רואים שפקודה cin קולטת רק את התווים עד רווח ראשון. כדי לקלוט את כל המחרוזת עלינו להשתמש בפונקציה getline הנמצאת בספריית string: void f5() { string s1; cout << "enter string: "; getline(cin, s1);; cout<<" s1: "<<s1<<endl; } int main() f5(); enter string: i love c s1: i love c Press any key to continue . . .

8 השמה: void f6() { string s = "hello world",s1,s2; s1 = s; cout << "s: "<<s<<" s1: "<<s1<<endl; s2 = "abc def"; cout<<"s2: "<<s2<<endl; s2[0] = 'x'; s2[1] = 'y'; s2[2] = 'z'; char c = 'o'; s2[3] = c; string s3 = s1+s2; cout<<"s3: "<<s3<<endl; } int main() f6(); פלט: s: hello world s1: hello world s2: abc def s2: xyzodef s3: hello worldxyzodef Press any key to continue . . .

9 פונקציות של ספרייה String
פונקציות הספרייה הגדרה: string s, s1; char c; אורך המחרוזת: int i = s.length() – int i = s.size() - אם המחרוזת ריקה (פונקציה בוליאנית) if (s.empty()) i++; if (s == "") i++;  תת-מחרוזת: s1 = s.substr(start, len) s[start, . . .,start+len-1] הפונקציה מחזירה תת-מחרוזת

10 i = s.find(s1); חיפוש מקום שמאלי ביותר של מופעה בתוך מחרוזת מחרוזת
חיפוש: i = s.find(c); חיפוש מקום שמאלי ביותר של מופעה תו בתוך מחרוזת i = s.find(s1); חיפוש מקום שמאלי ביותר של מופעה בתוך מחרוזת מחרוזת i = s.find(s1, start); חיפוש מקום שמאלי ביותר של מופעה מחרוזת בתוך מחרוזת החיפוש מתחיל ממקום start השוואה: i = s.compare(s1); 0 > i כאשר s < s1 0 = i כאשר s == s1 0 < i כאשר s < s1 החלפה: s.replace(start, num,s2) ; החלפת תת-מחרוזת של s שמתחילה במקום start ואורכה num בתת-מחרוזת 2s.

11 דוגמה של מימוש ב-C++ #include <iostream> #include <string> using namespace std; void f1() { char str[20] = {'I',' ','L','o','v','e',' ','C','+','+','\0'}; cout<<str<<endl; } void f2() char str[20] = "I Love C++";

12 void f3() { char str[20]; str[0] = 'I'; str[1] = ' '; str[2] = 'L'; str[3] = 'o'; str[4] = 'v'; str[5] = 'e'; str[6] = ' '; str[7] = 'C'; str[8] = '+'; str[9] = '+'; str[10] = ' '; str[11] = '\0'; cout<<str<<endl; }

13 void f4() { string s1 = "To be or not to be"; cout<<"s1: "<<s1<<endl; string s2; cout << "enter string: "; cin>>s2; cout<<" s2: "<<s2<<endl; } void f5() string s1; getline(cin, s1); cout<<" s1: "<<s1<<endl;

14 void f6() { string s = "hello world",s1,s2; s1 = s; cout << "s: "<<s<<" s1: "<<s1<<endl; s2 = "abc def"; cout<<"s2: "<<s2<<endl; s2[0] = 'x'; s2[1] = 'y'; s2[2] = 'z'; char c = 'o'; s2[3] = c; string s3 = s1+s2; cout<<"s3: "<<s3<<endl; }

15 void flen() { string s="to be or not to be"; int i = s.length(); cout <<"length = "<<i<<" size = "<<s.size()<<endl; bool b = s.empty();// 0 - false, 1 - true cout << "is empty? " << b << endl; s = ""; cout<<"s="" is empty?"<<s.empty() << endl;} /// find void ffind() // substring string s1 = s.substr(0, 5); cout<<"substring: "<<s1+"!"<<endl; char c='b'; // find int i = s.find(c); cout<<"s.find(c): "<<i<<endl; cout<<"find(be) "<<s.find("be")<<endl; cout<<"find(be) "<<s.find("be",4)<<endl; }

16 void fcompare() { // compare string s="to be or not to be"; cout <<s.compare("xyz")<<endl; cout <<s.compare("be")<<endl; cout <<s.compare("to be or not to be")<<endl; } void freplace() // replace s.replace(3,2,"study"); s.replace(19, 2 ,"study"); cout<<s<<endl;

17 int main() { flen(); ffind(); fcompare(); freplace(); return 0; } פלט:

18 int string_count(string s1,string s2)
{ int count=0,index; for(int i=0;i<s1.length();i++) } index=s1.find(s2,i); if(index!=-1) count++; i=index+1; return count;


Download ppt "מחרוזות-String בשפת C++ ישנו תפקיד מיוחד למערך מסוג char רצף של תווים הנמצאים במערך מסוג char המסתיימת בתו אפס (הכוונה לאפס ממש '0\' , ולא לתו '0')"

Similar presentations


Ads by Google