Posté(e) le 11 juillet 200916 a Salut Je n'ai pas arrivé à résoudre un problème de vérification d'une chaine de caractères. Le problème consiste à vérifier si un mot est palindrome ou non sans l'utilisation de la bib <string.h> J'ai tapé le code pas mal de fois ,execution "oui",erreur"0",warning"0" ,mais sa marche pas avec moi pourriez vous m'aidez svp exemple d'un mot palindrome : l i==0,j==5 l aval toujours ch == ch[j] mon code: #include<stdio.h> #include<conio.h> int main() { int n; char ch[n]; int i,m,k,p,j; m=1; puts("donne une chaine de caractaire\n"); gets(ch); printf("la chaine tape est :%s\n",ch); for (j=0;ch[j];j++) //compte le nb de caracteres "comme laal" ; printf("\nnombres de caractéres est:%d",j); p= j%2; k=j/2; if (p==0) // le cas d'un mot don les caracteres multiple de 2 { for(i=1;i==k,j==k+1;i++,j--) { if(ch[j]==ch[i] ) { m=0; } else { break; puts("le chainne ne pas palendrome"); } } } else { for(i=1;i==k,j==k+2;i++,j--) // le cas le de caracteres d'un mot impaire "comme laval" { if(ch[j]==ch[i]) { m=0; } else { break; puts("le chainne ne pas palendrome"); } } } if(m==0){ printf("lachaine est palindrome",j);} getch(); return(0); } merci
Posté(e) le 12 juillet 200916 a J'ai pas touché du C depuis un moment, mais est-ce qu'il ne faudrait pas initialiser n ?
Posté(e) le 13 juillet 200916 a un peu tiré par les cheveux ton algo int m, i, len; for (len=0;ch[len];len++); --len; m = 1; for( i = 0; (i < len-i) && m; ++i) { if( ch[i] != ch[len-i] ) m = 0; } if( m ) { // palindrome } else { // pas palindrome } pas testé, mais ça ressemble plus à ça normalement l'algo (qui marche bien)
Posté(e) le 13 juillet 200916 a Déjà pour commencer, pas besoin de tester que le nombre de lettres soit pair ou pas. Dans tes exemples : "LAAL" et "LAVAL", il te suffit de comparer la première lettre avec la dernière puis la deuxième avec l'avant dernière. Il suffit de s'arrêter à k/2. Et pour faire plus propre, tu pourrais faire une fonction is_palindrome qui retourne 1 si c'est un palindrome et 0 sinon (en plus ça sera plus rapide puisque tu n'aura pas besoin de parcourir ta chaîne tout le temps). Et puis tes for sont bien trop compliqués, il faut que tu simplifies au maximum, sinon tu vas te perdre.
Posté(e) le 25 juillet 200916 a Bon strlen est dans <string.h> alors il a fallu le refaire int my_strlen(char *str) { int count = 0; if (*str) while (*str && ++str && ++count); return (count); } int is_palindrome(char *str) { int count = 0; int len = my_strlen(str); while (count != len/2) { if (str[count] == str[len - count]) ++count; else return(-1); } return (1); } Le code est simple, je n'ai pas commente, n'hesite pas a poser des questions :)
Posté(e) le 27 juillet 200916 a Bon strlen est dans <string.h> alors il a fallu le refaire int my_strlen(char *str) { int count = 0; if (*str) while (*str && ++str && ++count); return (count); } int is_palindrome(char *str) { int count = 0; int len = my_strlen(str); while (count != len/2) { if (str[count] == str[len - count]) ++count; else return(-1); } return (1); } Le code est simple, je n'ai pas commente, n'hesite pas a poser des questions :) IONIS en force ? Echap: quand ton algo (pour une chose aussi simple) tourne en usine à gaz, c'est que t'es passé à côté de quelque chose... bonne continuation
Posté(e) le 30 juillet 200915 a Pas testé : int my_strlen(char *str) { int count = -1; while (str[++count]); return (count); } int is_palindrome(char *str) { int count = 0; int len = my_strlen(str); while (count++ < len/2) if (str[count] =! str[len - count-1]) return (-1); return (1); }
Posté(e) le 7 août 200915 a Usine a gaz pour le délire, pas testé, mais a mon avis c'est très loin de marcher. char is_palindrome(char *word) { char *str1; char *str2; int add; int i; int j; int len; add = 1; for (len = 0; word[len]; len++); if (len % 2) add += 1; str1 = malloc(sizeof(char) * len + add); str2 = malloc(sizeof(char) * len + add); for (j = 0, i = len; word[i] && word[j] && (((len % 2) ? (j < len / 2) : (j <= len / 2)) && ((len % 2) ? (i > len / 2) : (i >= len / 2))); str1[j] = word[j], str2[i] = word[i], i--, j++) for (i = 0; str1[i]; i++) if (str1[i] != str2[i]) break; if (i == len) return ('y'); return ('n'); } int main(int ac, char **av) { char c; if (ac >= 2) { c = is_palindrome(av[1]) write(1, &c, 1); } return (0); }
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.