עזרה בתרגיל ב-C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בתרגיל ב-C


didi18

Recommended Posts

פונקציה שמקבלת מחרוזת המכילה משפט, הפונקציה צריכה להחזיר מחרוזת המכילה רק את ראשי התיבות של המילים במשפט המקורי (האות הראשונה של כל מילה).

#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);
}

לא עובד =\

קישור לתוכן
שתף באתרים אחרים

צודק, אבל זה עדיין לא עובד..[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);
}

קישור לתוכן
שתף באתרים אחרים

תיקונים נכונים, נשאר לך רק:

1. בקלט, בתוכנית הראשית להשתמש ב-gets כי באופן השימוש ב-scanf שעשית הקלט יתקבל עד הרווח הראשון. gets לעומת זאת קולטת עד לקבלת סוף שורה.

2. לפני ההדפסה האחרונה לבצע השמה של NULL במקום עליו מצביע q כדי לסמל סוף מחרוזת.

קישור לתוכן
שתף באתרים אחרים

יש לי הצעה איך לפשט לך את התרגיל.

במקום ליצור מערך זמני וכל פעם להעתיק אות למערך החדש ורק לבסוף להדפיס

אולי פשוט תדפיסי אות אות, כלומר בתוך הלולאה ברגע שמוצאים אות ראשונה של מילה ישר תדפיסי אותה

זה יקל על המימוש ויעזור לך ביתר קלות למצוא שגיאות.

קישור לתוכן
שתף באתרים אחרים

תודה! :yelclap:[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));
}
}

}

קישור לתוכן
שתף באתרים אחרים

אפשר גם לעשות את זה בדרך אחרת, לא יודע אם זה יהיה יותר יעיל- לעשות split על רווח למחרוזת. מזה יתקבל מערך של כל המלים, עליו רצים ומוסיפים למחרוזת כלשהי את האות הראשונה בכל תא.

קישור לתוכן
שתף באתרים אחרים

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 256

void 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

תאמיני לי זה רק יעזור לך

קישור לתוכן
שתף באתרים אחרים

מזמן מזמן לא תרגלתי 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! */
}

קישור לתוכן
שתף באתרים אחרים

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 256

void 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

תאמיני לי זה רק יעזור לך

כן.. רק שהמורה דורשת לעשות את זה עם פוינטרים, כי את השיטה הקלה בתכלס כולם יודעים

וככה גם מתרגלים את המצביעים...

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...