פורסם 2010 ביוני 2915 שנים שלום רב!יצרתי מערך דינאמי של מצביעים בכדי לקלוט לכל תא בו מחרוזת ולמיין אותןchar**temp; temp=(char**)malloc(sizeovstring*sizeof(char*));אז אם אני עושה כך: temp[0]="xyz"; temp[1]="assssssssssbc"; temp[2]="aqq"; temp[3]="aaa"; temp[4]="phg";ואז ממין אז אין שום בעיה, אך אני לא רוצה להגדיר לכל תא מחרוזת, אלא לקבל מהמשתמשאך כאשר אני עושהcin.getline(temp[i],sizeof(char*)); התוכנית קורסת לי.אשמח להסבר מדוע זה קורה וכיצד לפתור זאתתודה רבה!
פורסם 2010 ביוני 2915 שנים קודם כל, אם אתה עובד ב-++C, יש סיבה שאתה עובד עם מערכים, malloc ו-*char במקום לעבוד עם vector, new ו-string?מהו ה-i שבו התכנית קורסת לך?חוץ מזה, הפרמטר השני שמועבר ל-cin.getline צריך להיות מספר התווים המקסימלי במערך. ככה אתה סתם מעביר לו 4 (שזה sizeof של *char), וגם הפרמטר שמועבר ל-malloc צריך להיות גודל המערך, ולפי השם של מה שאתה מעביר לו (sizeofstring) נראה לי שאתה מעביר לו ערך לא נכון.יעזור אם תתן קצת יותר מידע.
פורסם 2010 ביוני 2915 שנים מחבר אנחנו רק בתחילת הקורס ולכן אמרו לנו להשתמש בשפת c אך עם הקלט ופלט של C++.התוכנית קורסת בשניה שהיא מגיעה לcin.getline(temp[i],sizeof(char*)); התוכנית הראשית זה כך: cout<<"Enter Length of strings"<<endl; cin>>sizeovstring; r=strfunc(sizeovstring);כאשר int sizeovstring; char**r;וזו הגדרת הפונקציה:char**strfunc(int sizeovstring){sizeovstring-אמור להיות מספר המחרוזות שברצונו של המשתמש להקליד.מה שהתוכנית הראשית משיגה מהמשתמש ומעבירה לפונקציה שיוצרת את מערך המצביעים הדינמי.
פורסם 2010 ביוני 2915 שנים אני מבין אז למה לא להשתמש ב-string ו-vector, אבל כן יותר נכון להשתמש ב-new במקום malloc. נו, שוין.הבעיה שלך היא שאתה מקצה לא נכון את המערך.אתה מקצע מערך של sizeovstring מצביעים, כלומר הוא יכיל sizeovstring מחרוזות. איברי המערך לא מאותחלים לכלום בשלב הזה. גם את איברי המערך אתה צריך לאתחל (באמצעות malloc או new). יש מבין?אני לא מבין למה אתה לא פשוט רושם פה את כל הקוד באופן מסודר...
פורסם 2010 ביוני 2915 שנים מחבר char**strfunc(int sizeovstring){ char**temp; int i,flag; char *tempf1; temp=(char**)malloc(sizeovstring*sizeof(char*)); for(i=0;i<sizeovstring;i++){ cout<<"Enter string"<<endl; cin.getline(temp[i],sizeof(char*)); } 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); return temp;}מצטער, אך לא הבנתי מה אמרת שיש לעשות.איך מאתחלים מערך באמצעות מלוק?איך יש להקצות את המערך?תודה רבה!
פורסם 2010 ביוני 2915 שנים אוקי, התוכנית שלך כמעט סבבה, למעט שתי בעיות:א. כשאתה מקצה את temp, אז הוא בעצם יוצר לך מערך של sizeovstring מצביעים, אבל הם לא מאותחלים. זה אומר שהתוכן של המערך הוא זבל.לפני שאתה יכול לעשות getline לתוך [temp[i, אתה צריך לדאוג ש-[temp[i יצביע לאיזשהו מערך תקני של char. את המערך הזה אתה צריך גם להקצות באמצעות malloc (הגודל שלו צריך להיות הגודל המקסימלי של מחרוזת שאתה מרשה שהמשתמש יכניס + 1).ב. הטעות השנייה היא שהפרמטר השני שאתה מעביר ל-getline צריך להיות גודל המערך שאותו הקצית ב-א'.תעשה את זה ואז הקוד יעבוד.כמובן, בסוף התוכנית תזכור לשחרר את כל הזכרון שהקצית באמצעות free.
פורסם 2010 ביוני 2915 שנים מחבר אוף!זה פשוט לא הולך לי.בבקשה תראה לי דוגמא למה אתה מתכוון.איך אני עושה שהנ"ל יצביע למערך תקני של צ'אר והגודל המקסימלי נקבע ע"י המשתמש-תלוי מה הוא מכניס.ואת ב ניסיתי לעשותcin.getline(temp[i],sizeovstring); וזה נדפק לגמרי....בבקשה תראה לי דוגמאתודה רבה.
פורסם 2010 ביוני 2915 שנים א. תעלה את הקוד המלא.ב. תחליט מה אומר המשתנה sizeovstring - מספר המחרוזות שיש לך, או האורך המקסימלי של כל מחרוזת?
פורסם 2010 ביוני 2915 שנים מחבר char**strfunc(int sizeovstring){ char**temp; int i,flag; char *tempf1; temp=(char**)malloc(sizeovstring*sizeof(char*)); for(i=0;i<sizeovstring;i++){ cout<<"Enter string"<<endl; cin.getline(temp[i],sizeof(char*)); } 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 sizeovstring; char**r; cout<<"Enter Length of strings"<<endl; cin>>sizeovstring; r=strfunc(sizeovstring);}sizeovstring-גודל שהפונקציה מקבלת ויוצרת מערך תווים בגודל זה וקולטת למערך זה מחרוזותלאחר מכן הפונקציה ממיינת את המחרוזות לפי הסדר מדפיסה את המערך ומחזירה את המערךלתוכנית הראשית
פורסם 2010 ביוני 2915 שנים זה הקוד שכבר העלית! תעלה את הקוד אחרי התיקון שניסית לעשות. אני חוזר ואומר: לפני שאתה יכול לעשות getline לתוך [temp[i, אתה צריך לדאוג ש-[temp[i יצביע לאיזשהו מערך תקני של char. את המערך הזה אתה צריך גם להקצות באמצעות malloc (הגודל שלו צריך להיות הגודל המקסימלי של מחרוזת שאתה מרשה שהמשתמש יכניס + 1).
פורסם 2010 ביוני 3015 שנים מחבר יצרתי עוד מערך בגודל הנתון+1 והצבתי בו סלאש אפס בכל תאים כדי שלא יהיה זבלוהצבעתי מכל תא במערך המצביעים למערך החדשאז התוכנית לא נופלתאך גם לא עושה את מה שצריךהתקדמנו קצת(:char**strfunc(int sizeovstring){ char**temp; int i,flag; char*tem; char *tempf1; tem=(char*)malloc((sizeovstring+1)*sizeof(char)); for(i=0;i<(sizeovstring+1);i++){ tem[i]='\0'; } temp=(char**)malloc(sizeovstring*sizeof(char*)); for(i=0;i<(sizeovstring);i++){ temp[i]=tem; } for(i=0;i<sizeovstring;i++){ cout<<"Enter string"<<endl; cin.getline(temp[i],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 sizeovstring; char**r; cout<<"Enter Length of strings"<<endl; cin>>sizeovstring; r=strfunc(sizeovstring);}
פורסם 2010 ביוני 3015 שנים כי עכשיו כל האיברים ב-temp מצביעים לאותו מערך בדיוק. מה הרווחת כאן?כל איבר של temp צריך להצביע למערך אחר.חוץ מזה, עדיין נראה לי מוזר ש-sizeovstring הוא גם גודל המערך וגם גודל כל מחרוזת. אתה בטוח שהבנת את התרגיל נכון?
פורסם 2010 ביוני 3015 שנים מחבר ניסוח השאלה הוא כך: "פונקציה שמקבלת גודל ויוצרת מערך תווים בגודל זה וקולטת אליו מחרוזת"אז לפי דבריך, יוצא שלכל temp[i[ צריך שיהיה לו מערך משלו, איך אני יכול ליצור כל-כך הרבה מערכים? הרי אם לדוגמא המשתמש הכניס שהוא רוצה לרשום 10 מחרוזות.אז יווצר לי מערך של מצביעים שהוא של 10אז לכל אחד כזה אני אמור ליצור מערך משלו ולהצביע מ temp על המערך הזהאיך עושים דבר כזה?(שלכל תא בדינאמי יהיה מערך משלו)תודה רבה.
פורסם 2010 ביוני 3015 שנים אני לא מבין, השאלה מבקשת ממך פונקציה שמקבלת גודל ויוצרת מערך תווים. אז למה אתה עושה מערך של מערכים?
פורסם 2010 ביוני 3015 שנים מחבר סליחה, שכחתי להעתיק את תחילת השאלהכתוב תוכנית שקולטת 5 מחרוזות (לתוך מערך מצביעים). על התוכנית לאחסן את המחרוזות בזיכרון בצורה דינאמית ולהדפיס אותם על המסך.כמו כן על התכנית למיין אותם לפי סדר מילוני ולהדפיס שנית.אני עושה את כל הפונקציות ביחד כי זה לא להגשה זה רק לתרגול.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.