Concatenation de deux chaine

mb42 Messages postés 553 Statut Membre -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

soit ch1="ab"
et ch2="hg"

apres la concatenetion

ch1="abhg"

je doit faire une solution sans utiliser les fonctions predefinie qui se trouve dans la bibliotheque string.h

ma premiere solution est

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{char ch1[50],ch2[50];
int i;
printf("donner la chaine ch1\n");
scanf("%s",ch1);
printf("donner la chaine ch2\n");
scanf("%s",ch2);
;
for(i=0;i<strlen(ch1)+strlen(ch2);i++)
{ch1[i]+=ch2[i];
}
printf("la nouvelle chaine est %s\n",ch1);
getch();
}

mais elle ne donne pas le resultat juste

je suppose qu'on doit tester sur '\0'

aidez moi c urgent
A voir également:

6 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,

ch1[i]+=ch2[i];
Cela va additionner les codes ascii modulo 255, mais aucune concaténation.
Pour concaténer deux chaînes, tu dois dans un premier temps allouer une chaîne de la bonne taille. Copier un à un les caractères de la première chaîne et après ceux de la seconde chaîne.

Cdlt
0
loupius Messages postés 789 Statut Membre 148
 
J'avais demandé la suppression de ce doublon.
Voir l'autre post: http://www.commentcamarche.net/forum/affich-15052829-concatenation.
et même avec: https://forums.commentcamarche.net/forum/affich-15051914-chaine-de-caractere.
A suivre.
0
mb42 Messages postés 553 Statut Membre 7
 
desole pour le doublant

voila une autre solution

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{char ch1[50],ch2[50];
int i;
printf("donner la chaine ch1\n");
scanf("%s",ch1);
printf("donner la chaine ch2\n");
scanf("%s",ch2);
for(i=0;i<strlen(ch1)+strlen(ch2);i++)
{if(ch1[i]=='\0')
ch1[i]=ch2[i];
}

printf("la nouvelle chaine est %s\n",ch2);
getch();
}

mais elle ne donne pas le reultat juste

pouvez corriger ce code
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
l'idée, comme il a déja été dit au post #1, est de :

créer un nouvelle chaine assez grande pour recevoir le résultat
Copier la première dans cette nouvelle,
et, à partir de la fin de la première, y copier la deuxième.
0
mb42 Messages postés 553 Statut Membre 7
 
voila ma reponse

mais aussi ne donne pas la valeur juste

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{char ch1[50],ch2[50],ch3[50];
int i;
printf("donner la chaine ch1\n");
scanf("%s",ch1);
printf("donner la chaine ch2\n");
scanf("%s",ch2);
for(i=0;i<strlen(ch1)+strlen(ch2);i++)

{ i=0;
while(ch1[i]!='\0')
{ch3[i]=ch1[i];
i++;
}
if(ch1[i]=='\0')
ch3[i]=ch2[i];

}

printf("la nouvelle chaine est %s\n",ch3);
getch();
}
0
loupius Messages postés 789 Statut Membre 148
 
Il ne faut pas écrire des lignes de code au hasard.
As-tu essayé de faire tourner ta boucle 'for' à la main ?
for (i=0; i<strlen(ch1)+strlen(ch2); i++)
{
  i=0;
On voit tout de suite qu'il y a un gros problème !
Réfléchis encore ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Hum, et je me permettrais même de rajouter que d'après ton énoncé (je doit faire une solution sans utiliser les fonctions predefinie qui se trouve dans la bibliotheque string.h), tu n'as pas le droit d'utiliser strlen ;-))).
Tu dois donc aussi coder cette fonction.

0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
for(i=0;i<strlen(ch1)+strlen(ch2);i++) {

  i=0;

  while(ch1[i]!='\0') {
    ch3[i]=ch1[i];
    i++;
    }

  if(ch1[i]=='\0') ch3[i]=ch2[i];
} 


à vrai dire je ne comprends pas du tout ce que tu as pensé: ok, la nouvelle chaine est là, mais que font ces deux boucles imbriquées ? Pourquoi modifies-tu le i de ta boucle for directement au début en le mettant à 0 ?

Ensuite je crois que tu te méprends sur le '/0' il n'est utilisé qu'à la fin de la chaine, pas partout après.

Enfin bref, je pense que tu t'écartes en essayant d'utiliser le '/0', tu n'en as pas besoin. la seule chose qu'il te faut c'est :
avoir les idées claires sur ce que tu veux faire AVANT de coder
utiliser strlen() (tu coderas toi-même cette fonction avec un autre nom, et c'est là que tu utiliseras le '/0', pas ailleurs)
faire les choses séparément :
D'ABORD on remplit ch3 avec ch1, jusqu'à la fin de ch1
ENSUITE (dans une boucle SEPAREE), à partir de l'endroit où on s'est arrêté de remplir ch3 (c-à-d la fin de ch1), on remplit le reste avec les éléments de ch2

Donc programme d'abord la première boucle.

Pour la deuxième, si la première fonctionne : demandes-toi à partir de quel indice tu dois commencer à remplir ch3 avec ch2. (aides-toi d'un dessin, fait le d'abord avec un papier et un crayon toi-même).
0