didi18 פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 פונקציה שמקבלת מחרוזת המכילה משפט, הפונקציה צריכה להחזיר מחרוזת המכילה רק את ראשי התיבות של המילים במשפט המקורי (האות הראשונה של כל מילה).#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);}לא עובד =\ קישור לתוכן שתף באתרים אחרים More sharing options...
ofir_yair פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 שימי לב במשפט ה-if בתוך הלולאה, בדיקת שיוויון באמצעות ==, ולא באמצעות = (המבצע שם השמה). קישור לתוכן שתף באתרים אחרים More sharing options...
didi18 פורסם 2007 בנובמבר 17 מחבר Share פורסם 2007 בנובמבר 17 צודק, אבל זה עדיין לא עובד..[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);} קישור לתוכן שתף באתרים אחרים More sharing options...
ofir_yair פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 תיקונים נכונים, נשאר לך רק:1. בקלט, בתוכנית הראשית להשתמש ב-gets כי באופן השימוש ב-scanf שעשית הקלט יתקבל עד הרווח הראשון. gets לעומת זאת קולטת עד לקבלת סוף שורה.2. לפני ההדפסה האחרונה לבצע השמה של NULL במקום עליו מצביע q כדי לסמל סוף מחרוזת. קישור לתוכן שתף באתרים אחרים More sharing options...
djdodo פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 יש לי הצעה איך לפשט לך את התרגיל.במקום ליצור מערך זמני וכל פעם להעתיק אות למערך החדש ורק לבסוף להדפיסאולי פשוט תדפיסי אות אות, כלומר בתוך הלולאה ברגע שמוצאים אות ראשונה של מילה ישר תדפיסי אותהזה יקל על המימוש ויעזור לך ביתר קלות למצוא שגיאות. קישור לתוכן שתף באתרים אחרים More sharing options...
didi18 פורסם 2007 בנובמבר 17 מחבר Share פורסם 2007 בנובמבר 17 תודה! [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)); } }} קישור לתוכן שתף באתרים אחרים More sharing options...
ofir_yair פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 תדפיסי תחילה את האות הראשונה של המילה הראשונה (גם אם אין רווח לפניה)ואח"כ בהדפסה תוסיפי כוכבית לפני (p+1) קישור לתוכן שתף באתרים אחרים More sharing options...
didi18 פורסם 2007 בנובמבר 17 מחבר Share פורסם 2007 בנובמבר 17 תדפיסי תחילה את האות הראשונה של המילה הראשונה (גם אם אין רווח לפניה)ואח"כ בהדפסה תוסיפי כוכבית לפני (p+1)ולקדם את המצביע..תודה שוב :] קישור לתוכן שתף באתרים אחרים More sharing options...
Master Boo פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 אפשר גם לעשות את זה בדרך אחרת, לא יודע אם זה יהיה יותר יעיל- לעשות split על רווח למחרוזת. מזה יתקבל מערך של כל המלים, עליו רצים ומוסיפים למחרוזת כלשהי את האות הראשונה בכל תא. קישור לתוכן שתף באתרים אחרים More sharing options...
djdodo פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 #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תאמיני לי זה רק יעזור לך קישור לתוכן שתף באתרים אחרים More sharing options...
zurkin1232 פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 מזמן מזמן לא תרגלתי 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! */} קישור לתוכן שתף באתרים אחרים More sharing options...
didi18 פורסם 2007 בנובמבר 17 מחבר Share פורסם 2007 בנובמבר 17 #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תאמיני לי זה רק יעזור לךכן.. רק שהמורה דורשת לעשות את זה עם פוינטרים, כי את השיטה הקלה בתכלס כולם יודעיםוככה גם מתרגלים את המצביעים... קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 בנובמבר 17 Share פורסם 2007 בנובמבר 17 אז תשתמשי בשיטה הרגילה, וכשזה יעבוד תעברי לעבודה עם מצביעים. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.