עבור לתוכן

palindrome in ANSI C

Featured Replies

פורסם

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


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

int palindrome (char s[]);
int main (void){

char word[] ="affa";
if ( (palindrome (word) ) == 1 )
{
printf("Is Palindrome !");
}
else
{
printf("Not a Palindrome !");
}

return 0;
}

int palindrome (char s[]){

int i,l;

l=strlen(s);

for (i=0 ; (i=l/2) ; i++)
{
if ((s[i])!=(s[l-i-1]))
return 0;
}
return 1;

}

תודה !! ;D

פורסם

ה-C שלי חלודה להחריד (והיא אף פעם לא הייתה מדהימה...),

אבל התנאי שלך בלולאה נראה לי לא תקין, תנסה אולי לשנות אותו למשהו בסגנון הזה:

 for (i=0 ; i < l / 2; i++) 

עריכה:

אוקיי, הבנתי למה הוא נראה לי לא תקין.

זה לא תנאי מה שיש לך שם, זה השמה!

אתה פשוט מכניס לתוך i את הערך של l / 2 ואז גורם ללולאה אין סופית.

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

אם למשל תיקח את המחרוזת - abccca, אז אני חושב שזה יתקע בלולאה אין סופית גם עבור המחרוזת הזאת (למרות שזה לא פלינדרום)

פורסם
  • מחבר

אכן זה סידר את הבעיה...


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

int palindrome (char s[]);
int main (void){

char word[] ="abrba";
if ( (palindrome (word) ) == 1 )
{
printf("Is Palindrome !");
}
else
{
printf("Not a Palindrome !");
}

return 0;
}

int palindrome (char s[]){

int i,l;

l=strlen(s);

for (i=0 ; i < l / 2; i++)
{
if ((s[i])!=(s[l-i-1]))
return 0;
}
return 1;

}

עכשיו... איך אני משכלל את זה עוד קצת ומוסיף שהפונק' מתעלמת מרווחים וטאבים בתוך המערך שמתקבל? :nixweiss:

תודה !

פורסם

תנסה קודם להתעלם מהרווחים (לא לקרוא אותם\למחוק אותם) ואז לבדוק האם פלינדרום.

פורסם

או לחלופין להשתמש בפונקציית trimming כלשהי שתתנקה לך את המחרוזת לאותיות בלבד.

פורסם

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

פורסם
  • מחבר

הקטע עם האינדקסים ידוע... אבל אם אני מעוניין לעשות את זה ללא מצביעים ?

פורסם

...אז תעשה עם אינדקסים.

או שאתה צריך להסביר את עצמך יותר טוב.

פורסם
  • מחבר

:kopfpatsch: צודק...

תודה :)

ארכיון

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

דיונים חדשים