עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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 לפני קבלת הקלט.

פורסם
  • מחבר

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

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.