פורסם 2007 בנובמבר 1718 שנים פונקציה שמקבלת מחרוזת המכילה משפט, הפונקציה צריכה להחזיר מחרוזת המכילה רק את ראשי התיבות של המילים במשפט המקורי (האות הראשונה של כל מילה).#include<stdio.h>#include<string.h>void teivot(char *s);void main(){ char s[10]; printf("Enter string\n"); scanf("%s",&s); teivot(s);}void teivot(char *s){ char *p, *q; int i; char s1[10]; p=s; q=s1; (*q)=(*p); p++; q++; for(i=1;i<8;i++,p++) { if (((*p)=' ') && ((*(p+1))!=' ')) { (*q)=(*p); q++; } } printf("%s",s1);}לא עובד =\
פורסם 2007 בנובמבר 1718 שנים שימי לב במשפט ה-if בתוך הלולאה, בדיקת שיוויון באמצעות ==, ולא באמצעות = (המבצע שם השמה).
פורסם 2007 בנובמבר 1718 שנים מחבר צודק, אבל זה עדיין לא עובד..[br]פורסם בתאריך: 17.11.2007 בשעה 13:36:05מצאתי כמה טעויות ותיקנתי.. אבל עדיין לא עובדvoid teivot(char *s){ char *p, *q; int i; char s1[10]; p=s; q=s1; (*q)=(*p); p++; q++; for(i=1;i<8;i++,p++) { if (((*p)==' ') && ((*(p+1))!=' ')) { (*q)=(*(p+1)); q++; } } printf("%s",s1);}
פורסם 2007 בנובמבר 1718 שנים תיקונים נכונים, נשאר לך רק:1. בקלט, בתוכנית הראשית להשתמש ב-gets כי באופן השימוש ב-scanf שעשית הקלט יתקבל עד הרווח הראשון. gets לעומת זאת קולטת עד לקבלת סוף שורה.2. לפני ההדפסה האחרונה לבצע השמה של NULL במקום עליו מצביע q כדי לסמל סוף מחרוזת.
פורסם 2007 בנובמבר 1718 שנים יש לי הצעה איך לפשט לך את התרגיל.במקום ליצור מערך זמני וכל פעם להעתיק אות למערך החדש ורק לבסוף להדפיסאולי פשוט תדפיסי אות אות, כלומר בתוך הלולאה ברגע שמוצאים אות ראשונה של מילה ישר תדפיסי אותהזה יקל על המימוש ויעזור לך ביתר קלות למצוא שגיאות.
פורסם 2007 בנובמבר 1718 שנים מחבר תודה! [br]פורסם בתאריך: 17.11.2007 בשעה 13:55:32 יש לי הצעה איך לפשט לך את התרגיל. במקום ליצור מערך זמני וכל פעם להעתיק אות למערך החדש ורק לבסוף להדפיס אולי פשוט תדפיסי אות אות, כלומר בתוך הלולאה ברגע שמוצאים אות ראשונה של מילה ישר תדפיסי אותה זה יקל על המימוש ויעזור לך ביתר קלות למצוא שגיאות. איך עושים את זה? כי ככה זה לא עובד לי: void teivot(char *s){ char *p; int i; p=s; for(i=1;i<(N-1);i++,p++) { if (((*p)==' ') && ((*(p+1))!=' ')) { printf("%c", (p+1)); } }}
פורסם 2007 בנובמבר 1718 שנים תדפיסי תחילה את האות הראשונה של המילה הראשונה (גם אם אין רווח לפניה)ואח"כ בהדפסה תוסיפי כוכבית לפני (p+1)
פורסם 2007 בנובמבר 1718 שנים מחבר תדפיסי תחילה את האות הראשונה של המילה הראשונה (גם אם אין רווח לפניה)ואח"כ בהדפסה תוסיפי כוכבית לפני (p+1)ולקדם את המצביע..תודה שוב :]
פורסם 2007 בנובמבר 1718 שנים אפשר גם לעשות את זה בדרך אחרת, לא יודע אם זה יהיה יותר יעיל- לעשות split על רווח למחרוזת. מזה יתקבל מערך של כל המלים, עליו רצים ומוסיפים למחרוזת כלשהי את האות הראשונה בכל תא.
פורסם 2007 בנובמבר 1718 שנים #include<stdio.h>#include<stdlib.h>#include<string.h>#define N 256void teivot(char *s);void main(){char s[N];printf("Enter string\n");gets(s);teivot(s);system("pause");return;}void teivot(char *s){int i; if (s[0]!=' ') printf("%c", s[0]); for(i=0;i<N-1;i++) { if ( s[i]==' ' && s[i+1]!=' ') printf("%c", s[i+1]); }}תבדקי את זה נראה לי זה עובד[br]פורסם בתאריך: 17.11.2007 בשעה 14:29:59יש לי גם המצלה חמה לעתידתפסיקי להשתמש בדברים כמו (S+1)*ותתחילי להשתמש בצורה היותר קלה [1]Sתאמיני לי זה רק יעזור לך
פורסם 2007 בנובמבר 1718 שנים מזמן מזמן לא תרגלתי C, וגם לא ניסיתי לקמפל את הקוד הזה, אבל הנה הגרסה שלי (השתדלתי לכתוב כמה שיותר הערות על מנת שהוא יהיה מובן):void print_initials(char *s){ int i = 0; while (s[i] != '\0') { /* go through all spaces. stop if current character is not a space or if we reached the end of the string */ while ((s[i] == ' ') && (s[i] != '\0')) ++i; /* s[i] is now the first non-space character. print it */ printf("%c", s[i]); /* now go through the rest of the word, until we reach the first space after the word or until we reach the end of the string */ while ((s[i] != ' ') && (s[i] != '\0')) ++i; /* now we are at the end of the current word. let's start over again (scan for next word, print char, and scan till end of word) */ } /* we got here because we reached to the end of the string. bye bye! */}
פורסם 2007 בנובמבר 1718 שנים מחבר #include<stdio.h>#include<stdlib.h>#include<string.h>#define N 256void teivot(char *s);void main(){char s[N];printf("Enter string\n");gets(s);teivot(s);system("pause");return;}void teivot(char *s){int i; if (s[0]!=' ') printf("%c", s[0]); for(i=0;i<N-1;i++) { if ( s[i]==' ' && s[i+1]!=' ') printf("%c", s[i+1]); }}תבדקי את זה נראה לי זה עובד[br]פורסם בתאריך: 17.11.2007 בשעה 14:29:59יש לי גם המצלה חמה לעתידתפסיקי להשתמש בדברים כמו (S+1)*ותתחילי להשתמש בצורה היותר קלה [1]Sתאמיני לי זה רק יעזור לךכן.. רק שהמורה דורשת לעשות את זה עם פוינטרים, כי את השיטה הקלה בתכלס כולם יודעיםוככה גם מתרגלים את המצביעים...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.