Bonne journée! Notre professeur nous a demandé de déterminer si un mot ou une série de nombres est un palindrome ou n'utilise pas de piles. J'ai déjà fini de faire ça. Mais je veux m'entraîner davantage maintenant j'essaie de déterminer si une phrase est un palindrome ou non en enlevant des espaces et d'autres caractères non pertinents (Note: Ne fait plus partie de mes devoirs) Mon code fonctionne déjà (j'espère) mais je trouve c'est désordonné. Donc je veux l'améliorer. Je veux supprimer la fonction goto car mon professeur m'a conseillé de ne pas l'utiliser. Comment puis-je sortir de l'instruction if sans utiliser la fonction goto? Merci d'avance. Aussi existe-t-il d'autres façons de vérifier si une phrase est un palindrome ou non parce que mon code est fait dans une méthode brute force. Mon code est le suivant: NOTE (je ne comprend pas/collé le struct et la pop et la fonction push ici)Palindrome - enlever le goto
int main(){
char word[11];
char temp[11];
char value;
int i=0, x=0, n=0, length=0;
Stack*head = NULL;
printf("Please type the word: ");
gets(word);
length = strlen(word);
while(i<length){
if(isspace(word[i]) || !isalpha(word[i])) {
if(isdigit(word[i])) goto NEXT; // i used the goto function here
i++;
continue;
}
NEXT:
temp[n]=word[i];
push(&head, word[i]);
i++;
n++;
}
temp[n]='\0';
while(x<n){
value = pop(&head);
if (value==temp[x]){
x++;
continue;
}
break;
}
if(x==n) printf("Yehey! It is a palindrome.");
else printf("Sorry, It is not a palindrome.");
getch();
}
Sur la base de vos suggestions. Voici mon code amélioré:
int main(){
char word[11];
char temp[11];
int i=0, n=0;
int flag = 1;
Stack*head = NULL;
printf("Please type the word: ");
fgets(word, 11, stdin);
for(i = 0; word[i]!='\0' ; i++){
if(isalnum(word[i])) {
temp[n]=word[i];
push(&head, word[i]);
n++;
}
}
temp[n]='\0';
for(i=0; temp[i]!='\0'; i++){
if (pop(&head)!=temp[i]){
flag = 0;
break;
}
}
if (flag==1) printf("Yehey! It is a palindrome.");
else printf("Sorry, It is not a palindrome.");
getch();
}
Je voudrais également vous conseiller de cesser d'utiliser la fonction gets(). Utilisez fgets() à la place, afin de ne pas casser votre pile si vous entrez 11 caractères ou plus. – BatchyX