שרשור מחרוזת ומספר, ++C

The Albatross

New member
שרשור מחרוזת ומספר, ++C

שלום לכולם. אני רוצה לשרשר מחרוזת ומספר למחרוזת אחת. הקוד הזה:
string str = "hello"; int num = 3; str = str + num;​
לא עובד, למרות שבג'אווה הוא כן עבד. האם אני יכול לעשות את אותו דבר ב++C או שאני חייב להפוך את המספר למחרוזת קודם?
 

nu shoin

New member
stringstream

הדרך הפשוטה ביותר היא לעשות משהוא כזה:
#include< sstream > using namespace std; . . . int num=3; stringstream ss; ss<<num; string str="hello"+ss.str();​
הסיבה שמה שניסית לעשות לא עבד היא בגלל שלstring אין ctor שמקבל int, כך שמבחינת הקומפיילר אין דרך אוטומטית להפוך int ל string.
 

selalerer

New member
בטכלס, אני לא רואה שום סיבה למה זה

לא יעבוד אני יכול לכתוב מחלקת string שזה יעבוד עבורה.
 

selalerer

New member
אני לא צריך ctor שמקבל int אני צריך

אופרטור + שמקבל int וזה ממש לא אתגר, עוד כמה דקות אני אעלה לפה קוד.
 

selalerer

New member
הנה:

#include <iostream> using namespace std; class s1 { private: char *str; public: s1(s1 &str) { s1::str=new char[strlen(str.str)+1]; strcpy(s1::str,str.str); } s1(const char *str) { s1::str=new char[strlen(str)+1]; strcpy(s1::str,str); } s1() { str=new char[1]; str[0]='\0'; } ~s1() { delete []str; } operator const char *() { return (const char *)str; } void operator=(s1 &str) { delete []s1::str; s1::str=new char[strlen(str.str)+1]; strcpy(s1::str,str.str); } s1 operator+(int num) { char tmpStr[7]; int numLen; numLen=sprintf(tmpStr,"%d",num); char *tmpPtr=new char[strlen(s1::str)+numLen+1]; sprintf(tmpPtr,"%s%d",s1::str,num); s1 ret(tmpPtr); delete []tmpPtr; return ret; } }; ostream &operator<<(ostream &os,s1 &s) { os<<(const char *)s; return os; } int main() { s1 str1("h"); s1 str2; str2=str1+12; cout << str2 <<endl; return 0; }​
 

nu shoin

New member
הרבה קוד, אבל עדיין

אתה לא יכול לעשות את הדברים האלו:
1: s1 s=3; 2: s1 s="hello "+3; 3: s1 s="hell"+'o';​
עדיף כבר להגדיר פונקציה כגון:
string itostr(int n) { stringstream ss; ss < < n; return ss.str(); } string s=itostr(3); string s="hello "+itostr(3);​
אגב, ניסית לרשת מ string לפני שמימשת את כל הקוד הזה לבד?
 

selalerer

New member
זה היה רק בשביל להדגים לך שאפשר

לעשות את זה בלי בעיה גדולה (את הקוד שנמצא בשורש השרשור).
 
למעלה