פורסם 2006 בדצמבר 2218 שנים בניצי מחלקה לייצוג מחרוזת StringString::String(){ str=NULL;}String::String(char* s)//defualt Constructor{ if(s)//אם המחרוזת לא ריקה { int l=strlen(s);//נבדוק את אורכה str=new char[l+1];//נקצה זכרון למערך בו איבר נוסף מגודל המחרוזת strcpy(str,s);//נעתיק את המחרוזת } else// -אם המחרוזת ריקה { str=NULL;// // המצביע לא מצביע על כלום }}String::String(const String &s)//copy Constructor{ if(s.getString())//אם המחרוזת ממנה נעתיק ריקה { int l=strlen(s.getString());//בדיקת אורכה str=new char[l+1];// '\0' הקצאת זכרון למחרוזת חדשה שיש לה מקום נוסף עבור strcpy(str,s.getString());//העתקת המחרוזת } else//אם המחרוזת ריקה { str=NULL;//המצביע לא מצביע על כלום }}String::~String()//פונקציה 'הורסת'-מחיקה { if (str)//אם המחרוזת לא ריקה delete [] str;//נשחרר את הזכרון שהוקצה לה str=NULL;//נאפס את המחרוזת}char* String::setString()//פונקציה להחזרת המחרוזת{ char* s; cout<<"\nEnter a string: "; cin>>s; int l=strlen(s); str=new char[l+1]; strcpy(str,s); return str;}char* String::getString()const{ return str;}מה צריכה להכיל פונקציה לקליטת מחרוזת מהמשתמש? (setString)ופונקציה שמעתיקה ממחרוזת קיימת החל מתו מסוים למחרוזת חדשה?ועוד בעיה: בתכנית הראשית ע"מ להצהיר על מחרוזת String a() אני חייבת לשים לכל הפחות גרשיים בתוך הסוגריים ,למרות ה constructor הראשון שהצהרתי עליו,למה זה?
פורסם 2006 בדצמבר 2218 שנים לגבי השאלה השנייה:כשמצהירים על אובייקט עם constructor דיפולטי (כלומר שלא מקבל פרמטרים), אז אסור לשים סוגריים.כלומר את צריכה להצהיר על a כך:String a;
פורסם 2006 בדצמבר 2218 שנים ב- setString, כשאת קוראת מחרוזת, את לא יכולה להשתמש ב- cin>> עם מצביע שלא מאותחל, אלא חייבת להעביר מצביע למערך שכבר הוקצה.הבעיה, כמובן, היא שאת לא יודעת מה אורך הקלט.אם יש לך אורך מקסימלי - את יכולה להקצות מערך בגודל הזה.אם לא, את יכולה להקצות מערך בגודל מסויים, ולהשתמש ב- cin.get (או אחת הוריאציות האחרות שלה) כדי לקרוא בכל פעם מספר תוים, ולצרף אותם למערך אחד.
פורסם 2006 בדצמבר 2218 שנים וכדי להעתיק מחרוזת מתו מסויים עד תו אחר, את צריכה קודם לבדוק שהקלט תקין(האינדקס הראשון גדול מ-0 וקטן מהאינדקס השני, ושהאינדקס השני קטן מהאורך של המחרוזת).אחר כך את צריכה ליצור פוינטר שיאותחל ב- (str+i1), ואת צריכה לשים ב- str[i2] סימון לסוף המחרוזת, ופשוט ליצור אובייקט String חדש עם הפויינטר החדש שיצרת, ובסוף להחזיר את התו שהיה ב- i2(שימי לב שאת מקצה מקום בCTOR שלך, ככה שזה לא יהרוס את הSTRING הישן).
פורסם 2006 בדצמבר 2318 שנים מחבר לא הבנתי איך אני מעתיקה מחרוזת החל תו מסוים!!!איך עושים את זה??ניסיתי להצהיר על מחרוזת חשדה ריקה, אליה אעתיק את החלק המבוקש ו.????זה מה שעשיתי (רצת בלאגן): String temp; char p=str, q=temp; while((p!=NULL)&&(*p!=tav)) { p++; } if(p==NULL) { return p; } else { p++; while(p!=NULL) { *q=*p; p++; q++; } } return q;
פורסם 2006 בדצמבר 2418 שנים נניח שאת רוצה להעתיק את מחרוזת SRC החל מהתו השלישי (בהנחה שהיא מספיק ארוכה!) אל תוך מחרוזת DST:strcpy(dst, src+3);הערה: כמובן לא לערבב ASCII עם UNICODE.
פורסם 2006 בדצמבר 2418 שנים מחבר איך אני מסמנת מצביע למחרוזת (על מנת שאוכל לעבור עליה????)char *p=str;לא עובד!!!!
פורסם 2006 בדצמבר 2418 שנים מחבר str הוא מטיפוס char * כתבתי את הפונקציה הזו:String temp; char *p=str; char *q=temp; int i=0; while ((q!=NULL)&&(*q!=c)) { q++; i++; } if(q!=NULL) { strcpy(temp, str+i); } return temp;ואלו ההערות שהקומפיילר מחזיר: 'initializing' : cannot convert from 'String' to 'char *' 'strcpy' : cannot convert parameter 1 from 'String' to 'char *'
פורסם 2006 בדצמבר 2418 שנים Duh!כי temp הוא String ולא char*.חוץ מזה כדי לחפש תו בתוך מחרוזת אל תכתבי לולאה בעצמך, יש את strchr שמחזיר מצביע למופע הראשון של תו בתוך מחרוזת (או NULL אם הוא לא שם, נדמה לי). תסתכלי קצת בתיעוד ותשתמשי בו כדי למצוא את c בתוך q.אגב שמות נורמליים יותר למשתנים רק יכולים להועיל.
פורסם 2006 בדצמבר 2418 שנים מחבר עוד שאלה:יש לי מחרוזת ארוכה המופרדת ע"י מסוים, אני רוצה לטפל בכל חלק של המחרוזת בנפרד.איך עושים את זה?נגיד אני קוראת לפונקצית עזר שבכל פעם תחזיר לי חלק מהמחרוזת (את החלק הקיים בין התו המסוים) מה צריך להיות קוד הפונקציה??? ואיך היא מחלקת? :s05:
פורסם 2006 בדצמבר 2418 שנים נא לקרוא בספריה על strtok.בתלות בקומפיילר, סביר להניח שיש גם גרסה יותר בטוחה שנקראת strtok_r.
פורסם 2006 בדצמבר 2518 שנים מחבר משהו לא מסתדר!!!!s היא מחרוזת מסוג String ואילו הפונקציה strchr משמתמשת באיברים מסוג const char str [ ], הקומפיילר רושם לי הערה כזו:error C2664: 'strchr' : cannot convert parameter 1 from 'String' to 'const char *'מה עושים?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.