la fusion des deux chaînes en C, la coupure de caractères

Je suis en train de fusionner les deux chaînes de caractères de longueur variable en C. Le résultat devrait être le 1er caractère de str1 puis le 1er caractère de str2 puis 2ème personnage de str1, 2e personnage de str2, etc. Quand il atteint la fin d'une chaîne, il doit ajouter le reste de l'autre de la chaîne.

Par Exemple:

str1 = "abcdefg";
str2 = "1234";

outputString = "a1b2c3d4efg";

Je suis assez nouveau à C, ma première idée a été de convertir les chaînes de tableaux puis essayez de parcourir les tableaux, mais je pensais qu'il pouvait être une méthode plus facile. Exemple de code serait appréciée.

Mise à JOUR:
J'ai essayé de mettre en œuvre la réponse ci-dessous. Ma fonction ressemble à la suivante.

void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
    printf("string1 is %s\n", s1);
    printf("string2 is %s\n", s2);

    while (*s1 != '
void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
printf("string1 is %s\n", s1);
printf("string2 is %s\n", s2);
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output = '\0';
printf("merged string is %s\n", *output);
}
'
&& *s2 != '
void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
printf("string1 is %s\n", s1);
printf("string2 is %s\n", s2);
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output = '\0';
printf("merged string is %s\n", *output);
}
'
) { *output++ = *s1++; *output++ = *s2++; } while (*s1 != '
void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
printf("string1 is %s\n", s1);
printf("string2 is %s\n", s2);
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output = '\0';
printf("merged string is %s\n", *output);
}
'
) *output++ = *s1++; while (*s2 != '
void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
printf("string1 is %s\n", s1);
printf("string2 is %s\n", s2);
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output = '\0';
printf("merged string is %s\n", *output);
}
'
) *output++ = *s2++; *output = '
void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
printf("string1 is %s\n", s1);
printf("string2 is %s\n", s2);
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output = '\0';
printf("merged string is %s\n", *output);
}
'
; printf("merged string is %s\n", *output); }

Mais je reçois un message d'avertissement lors de la compilation:

$ gcc -g -std=c99 strmerge.c -o strmerge
strmerge2.c: In function strMerge’:
strmerge2.c:41:5: warning: format ‘%s expects argument of type char *’, but argument 2 has type int [-Wformat]

Et quand je le lance il ne marche pas:

./strmerge abcdefg 12314135
string1 is abcdefg
string2 is 12314135
merged string is (null)

Pourquoi il pense que l'argument 2 est un int et que dois-je faire pour être un char? Si je supprime le "*" off sortie dans le printf, il ne donne pas une erreur de compilation, mais la fonction ne fonctionne toujours pas.

  • Alors, quel est votre problème?
  • Un utilisateur tape dans les deux chaînes. J'ai besoin de retourner une chaîne unique qui est une fusion des deux chaînes.
  • L'un de vos problèmes est la gestion de l'espace — où est la sortie va être placé. Avec ce fait, le code est assez simple. Bien que ni la chaîne d'entrée est terminé, copier un caractère de chacun à la sortie. Une fois qu'on est fini, vous avez deux boucles, l'une à l'échappement de la première chaîne et l'autre pour l'échappement de la deuxième chaîne. Un seul de ceux-ci seront exécutés (selon la chaîne la plus longue), mais ne vous embêtez pas à essayer de savoir qui il est; il n'y a pas besoin (en supposant que vous écrivez les boucles correctement).
  • La sortie est mis dans un nouveau string et puis tout simplement imprimé à l'aide de printf. Le tampon de destination est de 128 caractères, mais la chaîne de destination ne doit jamais être plus grand que ça.
  • L'erreur de compilation est parce que vous devez être l'impression output plutôt que *output (qui est le premier caractère de la chaîne plutôt que la chaîne elle-même). Aussi, output points à l'octet nul à la fin de la chaîne. Si vous souhaitez imprimer l'ensemble de la chaîne, vous devez préserver la valeur d'origine de output à l'entrée de la fonction.
InformationsquelleAutor tbenz9 | 2013-09-23