עבור לתוכן

c++-מערך דינאמי של מצביעים

Featured Replies

פורסם

אורך המערך temp1 צריך להתאים למספר המחרוזות שאתה הולך לקרוא (5), ולא לאורך כל מחרוזת (sizeovstring).

כל תא במערך צריך להצביע למערך אחר של char, שאותה אתה מקצה באמצעות malloc.

פורסם
  • מחבר

בוא נאמר ככה,

אני המשתמש והחלטתי שאני רוצה להכניס 7 מחרוזות כל אחת באורך שונה

אז איך אני בתור מתכנת עושה שיווצרו דווקא 7 מערכים שונים וכל תא במערך הדינאמי(מצביעים) יצביע לאחד מהם?

והרי אם אני מחליט שאני רוצה להכניס 100 מחרוזות אני אצור 100 מערכים שונים? זה יהיה קוד עצום.

נורא קשה לי להבין את ההגיון של הדבר הזה ואשמח אם תראה לי דוגמא מוחשית בכדי שהדבר יכנס לראש אחת ולתמיד.

פורסם

פשוט מאוד, תפצל את הקוד.

פונקציה אחת

לא מקבלת נתונים

שואלת את המשתמש אורך מחרוזת.

מקצה באופן דינמאי מקום למחרוזת (אורך +1)

מבקשת מהמשתמש את המחרוזת ומציבה.

מחזירה מצביע למחרוזת הזאת.

ברגע שיש לך את הפונקציה הזאת אז לא משנה כמה מחרוזות אתה צריך ליצור.

פונקציה שניה:

יוצרת מערך של מצביעים בכמות הדרושה (במקרה שלך 5)

קוראת לפונקציה הראשונה עבור כל איבר במערך הזה ומציבה את הערך שמתקבל.

גם תחליט מחר שאתה צריך 7 או 100 מחרוזות, פשוט אתה משנה את הערך במערך של המצביעים.

פורסם
  • מחבר

char*first(int sizeovstring){
char*tem;
int i;
tem=(char*)malloc((sizeovstring+1)*sizeof(char));
for(i=0;i<(sizeovstring+1);i++){
tem[i]='\0';
}
cout<<"Enter string"<<endl;
cin.getline(tem,sizeovstring);
//test if work
cout<<tem;
return tem;
}

char**strfunc(int sizeovstring2){
char**temp;
int i,flag;
char *tempf1;
int sizeovstring;

temp=(char**)malloc(sizeovstring2*sizeof(char*));
for(i=0;i<(sizeovstring2);i++){
cout<<"Enter Length of string"<<endl;
cin>>sizeovstring;
temp[i]=first(sizeovstring);
}

do{
flag=0;
for(i=0;i<(4);i++){
if (strcmp(temp[i],temp[i+1])==1){
tempf1=temp[i];
temp[i]=temp[i+1];
temp[i+1]=tempf1;
flag=1;
}
}
}while(flag==1);

for(i=0;i<5;i++){
cout<<temp[i]<<endl;
}

return temp;


}
int main(){
int sizeovstring2;
char**r;

cout<<"Enter Length of Pointer Array"<<endl;
cin>>sizeovstring2;
r=strfunc(sizeovstring2);

}

זה אכן מצליח לקלוט אך ישנה בעיה כמו שהייתה בC

ששם הייתי פותר אותה עם גטצ'אר

שהפונקציה רושמת הודעה למשתמש להכניס מחרוזת אך מכניסה אוטומטית וקופצת הלאה זאת אומרת שהיא לא מחכה למשתמש שיכניס את המחרוזת

פורסם

אם אתה מכניס נתונים מדוייקים, אז הבעיה היא האנטר בסוף שורה.

תנסה ()cin.ignore לפני קבלת הקלט.

פורסם
  • מחבר

תודה רבה לכם על העזרה המרובה!

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים