Chaine de caractère

Résolu/Fermé
istabandal - 28 déc. 2013 à 15:23
ellana29460 Messages postés 689 Date d'inscription lundi 7 octobre 2013 Statut Membre Dernière intervention 12 septembre 2015 - 29 déc. 2013 à 06:37
salut. j'ai problème avec la comparaison de deux chaines de caractère(sans utiliser strcmp). je n'arrive pas affiche la réponse 0 si toutes les deux chaines sont identique et 1 si elles ne le sont pas.
voici le code:

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

int comparech(char ch1[], char ch2[])
{
int i=0,j=0;
int cpt=0;

if(strlen(ch1)==strlen(ch2))
{
while(ch1[i]!='\0')
{
while(ch2[j]!='\0')
{
if(ch1[i]==ch2[j])
{
cpt++;
}
i++,j++;
}
}
if(cpt==strlen(ch1))
{
return 0;
}
else
{
return 1;
}
}
return 1;
}
int main()
{
char ch3[50]; char ch4[50];
printf("entrer une chaine de carctère: ");
gets(ch3);
printf("entrer encore une autre chaine de caractere: ");
gets(ch4);

comparech(ch3,ch4);
return 0;
}
A voir également:

3 réponses

ellana29460 Messages postés 689 Date d'inscription lundi 7 octobre 2013 Statut Membre Dernière intervention 12 septembre 2015 172
28 déc. 2013 à 15:37
j'ai modifie ton code, et ceci fonctionne :

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

int comparech(char ch1[], char ch2[])
{
    int i=0, j=0;
    while( *(&ch1+i) != '\0')   ///tant que la valeur de ce qui est a l'adresse memoire ch1+i est dofferent de '\0'
        i++;
    j=i;
    for(i=0;i<=j;i++)
    {
        if(ch1[i] != ch2[i])
            return 1;   ///les deux chaines sont dfferntes
    }
    return 0;       ///les deux chaines sont identiques
}

int main()
{
    char ch3[50];
    char ch4[50];
    printf("entrer une chaine de carctère: ");
    gets(ch3);
    printf("entrer encore une autre chaine de caractere: ");
    gets(ch4);

    printf("%d",comparech(ch3,ch4));
    return 0;
}
0
Merci ##ELLANA 29460##, je viens de voire mon erreur. c'était au niveau de l'appel de la fonction. j'ai juste ajouté le printf de ton programme principal et ça marche aussi!!
merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
28 déc. 2013 à 16:42
ellana29460,
while( *(&ch1+i) != '\0')
ch1 est déjà un pointeur. Donc pas besoin de &. De plus, ce que tu écris est exactement la même chose que ch1[i]. Donc l'erreur ne se situe pas là.
0
ellana29460 Messages postés 689 Date d'inscription lundi 7 octobre 2013 Statut Membre Dernière intervention 12 septembre 2015 172
29 déc. 2013 à 06:37
ok. je met ça comme ça pour être sur que ça plante pas (et mon compilateur fait le tri pour moi dans tout ça ^^)
0
Merci ##ELLANA 29460##, je viens de voire mon erreur. c'était au niveau de l'appel de la fonction. j'ai juste ajouté le printf de ton programme principal et ça marche aussi!!
merci neaucoup
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
28 déc. 2013 à 16:44
Bonjour,

Attention, gets() est obsolète. On utilise à la place fgets().
Ces deux fonctions stockent également le \n. Il faut donc penser à le retirer. Sinon gare aux mauvaises surprises.

Je mets en résolu puisque tu sembles avoir trouvé la solution :-))).
0