Echap Posté(e) le 11 juillet 2009 Partager Posté(e) le 11 juillet 2009 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nutty Posté(e) le 12 juillet 2009 Partager Posté(e) le 12 juillet 2009 J'ai pas touché du C depuis un moment, mais est-ce qu'il ne faudrait pas initialiser n ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 13 juillet 2009 Partager Posté(e) le 13 juillet 2009 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 13 juillet 2009 Partager Posté(e) le 13 juillet 2009 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
sloshy_ Posté(e) le 25 juillet 2009 Partager Posté(e) le 25 juillet 2009 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 :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 27 juillet 2009 Partager Posté(e) le 27 juillet 2009 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 30 juillet 2009 Partager Posté(e) le 30 juillet 2009 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); } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Slasch Posté(e) le 7 août 2009 Partager Posté(e) le 7 août 2009 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); } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.