在C中组合两个字符串

时间:2013-03-19 16:02:53

标签: c arrays string logic c-strings

我刚刚开始学习数组和字符串,我想加入两个字符串stringAstringB的输入,然后将它们的值放在另一个字符串stringC中找到他们的长度。

我想在没有内置函数的情况下解决它。

我已尝试编写代码,但我在stringB的长度以及stringC的内容中收到错误。这是我的代码:

#include <stdio.h>
int main()
{
    char stringA[100];
    char stringB[100];
    char stringC[100];
    int lengthA=0;
    int lengthB=0;
    int i,j;

    printf("Enter a string A, terminate with a tilde.\n");
    scanf("%[^~]",stringA);
    while (stringA[lengthA] != '\0') 
        lengthA++;
    printf("The length is %d\n",lengthA+1);
    printf("Enter a string B, terminate with a !.\n");
    scanf("%[^!]",stringB);
    lengthB=0;
    while (stringB[lengthB] != '\0') 
        lengthB++;
    printf("The length is %d\n",lengthB+1);
    for(i=0;i<lengthA;i++)
        stringC[i]=stringA[i];
    for(i=lengthA;i<lengthA+lengthB;i++)
        stringC[i]=stringB[i];
    printf("%s",stringC);
    return 0;
}

感谢您的帮助!

7 个答案:

答案 0 :(得分:3)

在这个循环中,一切看起来都很好:

for(i=lengthA;i<lengthA+lengthB;i++)
    stringC[i]=stringB[i];

在这里,您需要将索引考虑到stringB

另外,不要忘记NUL终结器。

编辑:另外,请不要忘记,当您正在阅读stringB时,代字号和换行符仍在输入缓冲区中。

答案 1 :(得分:0)

你从lengthA中的0开始计算,并且每增加一个字符直到'\ 0',所以lengthA是你实际的字符串长度。你不需要长度A + 1

在stringC的末尾附加一个空字符会有帮助吗?

答案 2 :(得分:0)

在此循环中,您必须消除lengthA StringB的偏移,如图所示

for(i=lengthA;i<lengthA+lengthB;i++)
    stringC[i]=stringB[(i - lengthA)];

在循环后添加NULL终结符

stringC[i] = '\0';

答案 3 :(得分:0)

导入第一个字符串后,您将离开波浪线和换行符。由于您要清除一定数量的字符,因此您只需拨打getchar()一定次数,但可能会有一种更优雅的方式。

在您设置stringC的循环中,您还会错误地将stringB编入索引。

请确保您终止stringC,但我认为它不会破坏此特定代码。这是一个很好的做法。

最后,你在字符串长度上输出额外的+1。这不是必要的(除非你试图计算〜和!作为长度的一部分)。

答案 4 :(得分:0)

雅各布有意思。

因此,要修复现有代码:

char stringC[200];

而且,stringB的索引是错误的。这应该有效:

stringC[i]=stringB[i-lengthA];

答案 5 :(得分:0)

第二个循环中stringB的索引是问题所在。请记住,此时索引ilengthA。也许您忘记使用变量j; - )

for(i=lengthA, j = 0; i < lengthA+lengthB; i++, j++)
    stringC[i] = stringB[j];

stringC[i + 1] = '\0';

作为提示:您不需要j

for(i=lengthA; i < lengthA+lengthB; i++)
    stringC[i] = stringB[i - lengthA];

stringC[i + 1] = '\0';

答案 6 :(得分:0)

以下问题讨论了在上面的代码中未被清除的输入缓冲区。 How to clear input buffer in C? 尝试使用调试器并在第二个scanf语句之后检查stringB的内容。