פורסם 2009 בינואר 216 שנים אני צריך לסדר מחרוזות לפי סדר לקסיגורפי, אני יודע באיזה פונקציה להשתמשאבל לא מצליח להבין מדוע לא עובד. אני מאתחל מערך:{char *a[]={"blabla" ,"kakaka" ,"mimimi"וצריך להשוות כל שתי מחרוזות בסופו של דבר צריך גם למיין מיון בועות כדי לסדר מחדש אבל זה כבר שטויותאני לא מצליח להשתמש בפונקציה strcmp בצורה נכונה כנראה.תודה ויום טוב
פורסם 2009 בינואר 216 שנים strcmp מחזירה 0 אם המחרוזות שוות, מספר חיובי אם התו הראשון ששונה בין המחרוזות גדול יותר במחרוזת הראשונה ומספר שלילי להיפך.
פורסם 2009 בינואר 216 שנים מחבר את זה אני יודע, אבל איך אני בודק את זה במערך של צ'ארים כזה כמו שכתבתי.?לולאה?? אם כן תראה לי איך...
פורסם 2009 בינואר 216 שנים מחבר טוב ניסיתי ליישם ויש בעיה עם הקוד הוא כן עושה חלק ממה שהוא אמור אבל יש איזה שגיאה רצינית מישו יכול לעזור פליז...#include <stdio.h>#include <string.h>int compare(const char *str1, const char *str2);void swap (char *a ,const char *str1, const char *str2);void main(){ char *a[] = {"nir", "amos", "levi"}; int i, j; for(i = 0; i < strlen(a); i++) { for(j = 1; j < i ; j++) { if(compare (a[j], a[j+1])) { swap(a,a[j], a[j+1]); } } } printf("The after sorting is:\n"); for (i = 0; i < strlen(a); i++) { printf("%s",a[i]); //הדפסת המערך הממוין } printf("\n");}int compare(const char *str1, const char *str2){ return strcmp(str1,str2);}void swap (char *a ,const char *str1, const char *str2) //פונקציה למיון המערך בסדר עולה{ int i ,j; char temp=0; for (i = 0; i < strlen(a) - 1; i++) //לולאה שרצה עד האיבר האחרון -1 { for (j = 0; j < strlen(a)- i -1; j++) // לולאה שתקטין את עצמה בלא לשנות את האיבר האחרון { if (a[j] > a[j+1]) // בדיקת זוג איברים סמוכים { temp = a[j]; a[j] = a[j+1]; //קידום האיבר הגדול ימינה a[j+1] = temp; } } }}
פורסם 2009 בינואר 216 שנים לא ברור לי למה הפונקציה swap צריכה לקבל גם מצביע למערך וגם מצביעים למחרוזות.פשוט שתקבל מצביע למערך ושני אינדקסים להחליף ביניהם. את ההחלפה תוכל לעשות עם משתנה temp, בלי צורך להחליף איבר איבר.
פורסם 2009 בינואר 216 שנים יש יותר מדי שורות ריקות בקוד הזה, תתקן כדי שיהיה קל יותר לקרוא.יש לך שם לפחות שגיאה אחת: אתה מעביר את a (שהטיפוס שלו הוא char** אל תוך פונקצית swap שמקבלת char* ).עוד הערה: האם יתכן שאתה מנסה להחליף את האותיות ממש במחרוזת, במקום להחיף רק את המצביעים במערך? ראשית, זה מיותר. שנית, זה באג. literal strings כלומר מחרוזות שהוגדרו כך "abc" נחשבות מחרוזות קבועות ואסור לשנות אותן.
פורסם 2009 בינואר 316 שנים מחבר שינית את התכנת למשהו יותר פשוט כדי שאוכל להבין קודם כל מה הרעיון, עדיין יש בעיה קטנה משום מה הוא מסדר אותם לפי הסדר הנכוןאבל את ZIV את שם ראשון, מה הבעיה???#include <stdio.h>#include <string.h>#define N 5void main(){ char *a[] = {"dog" ,"cat" ,"baby" ,"avi","ziv"}; int i ,j; char *tempi[1]={0}; for (i = 0; i < N - 1; i++) //לולאה שרצה עד האיבר האחרון -1 { for (j = 0; j < N - i - 1; j++) { if (strcmp(a[j] ,a[j+1])) { tempi[0] = a[j]; a[j] = a[j+1]; a[j+1] = tempi[0]; } } } printf("The Alphabetic Order Is: \n"); for (i = 0; i < N; i++) { printf("%s \n",a[i]); }}[br]פורסם בתאריך: 3.01.2009 בשעה 13:03:16טוב הצלחתי לפתור את הבעיה: בשורה:if (strcmp(a[j] ,a[j+1]) )הוספתי אם שווה ל-1 כי אז באמת המחרוזת השנייה גדולה מהראשונה.אז זה עובד, אבל היה עוד תנאי לשאלה והוא שהתכנית לא תבדיל בין אות קטנה לגדולה, יש פונקציה אחרת חוץ מ-strcmp??
פורסם 2009 בינואר 316 שנים מחבר כי אני צריך לשמור בו מחרוזת, אבל שוב שינית קצת תגיד מה דעתך:#include <stdio.h>#include <string.h>void print( char *ary, int n);void sort(char *ary, int n);#define N 7void main(){ char *a[] = {"hello","there","bye","bee","list","locomotion","train"}; printf("The Original Array is:\n"); print(&a[0], N); sort (&a[0] ,N); printf("The After Sorting Array Is:\n"); print(&a[0], N);}void print( char *ary[], int n){ int i; for ( i = 0; i < n; i++) { printf("%s\n",ary[i]); } printf( "\n" );}void sort(char *ary[], int n){ int i ,j ,x; char *tempi; char *str1; char *str2; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { str1 = ary[j]; str2 = ary[j+1]; x = mystrcmp( str1, str2); if (x == 1) { tempi = ary[j]; ary[j] = ary[j+1]; ary[j+1] = tempi; } } }}int mystrcmp(char *s1 ,char *s2){ return strcmp(s1 ,s2);}[br]פורסם בתאריך: 3.01.2009 בשעה 18:37:57אגב, שיניתי את הפונקציה ל-stricmp אבל הפלט לא תקין הוא משום מה לא מזהה את ההבדל...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.