עזרה בC

liatbi30

New member
עזרה בC

ערב טוב לכולם צריכה עזרה!!!

התרגיל :

2. כתוב תכנית הקולטת למחרוזת לא יותר מ=30 תווים. יש להדפיס מהמחרוזת את מילה האמצעית

יש למישהו רעיון איך אני בודקת מה המילה האמצעית???

כל עזרה תתקבל בברכה

תודה
 
ובכן

ספרי את הרווחים במחרוזת, וחלקי בשניים.
המילה שמתחילה אחרי מחצית הרווחים היא המילה האמצעית.
 

liatbi30

New member
עשיתי את זה

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


#include<stdio.h>
int main()
{
char a[30];
int i,j=0,k=0;
printf("Enter string:");
gets(a);
for(i=0;a!='\0';i++)
k++;
for(i=0;i<k;i++)
if(a==32)
{
j++;
while(a==32)
i++;
}
if((j+1)%2==0)
printf("\nError\n");
else
{
j=(j/2)+1;
for(i=j;a!=32;i++)
printf("%c",a);
}
printf("\n\n\n");
return 0;
}
 
ובכן (מקריאה חטופה)

אחרי שאת מכניסה ל-j את מחצית הרווחים (אגב, למה להוסיף 1?), את לא מדפיסה את המילה שמתחילה אחרי j רווחים, אלא את המילה שבמקום ה-j במחרוזת.
 

pitbol3

New member
אממ

תקיצי לולאה מ i=0 עד i=30( כאשר התו ה 31 במחזורת הוא '0\'.

הלולאה מדלגת בכל פעם שערך התא הוא רווח, כלומר ' '. אם היא פוגשת בתו אחר, היא שומרת את המיקום שלו במערך עזר מסוג int, ומדלגת על שאר המילה, עד שהיא רואה רווח.

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


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

פרסאוס

New member
שאלה טובה יותר

מה קורה במקרה של מספר זוגי של מילים?
אם יש לך ארבע מילים, מי היא האמצעית?
רמז ברור לפתרון מציאת מילה (רגילה, לאו דווקא האמצעית)
האות הראשונה אחרי רווח מסמנת מילה, אלא אם מצויין שמילה חייבת להכיל יותר מאות אחת.
אפשר להכניס את האינדקסים של תחילת המילים למערך דינמי (בC רישמה מקושרת)
ואז להחליט מי המילה האמצעית לפי פרמטר כלשהו.
 
למעלה