2

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

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

我尝试编写代码,但stringBstringC. 这是我的代码:

#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;
}

感谢您的帮助!

4

7 回答 7

3

这个循环的一切看起来都很好:

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

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

另外,不要忘记 NUL 终止符。

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

于 2013-03-19T16:05:38.727 回答
0

您从 0 开始计数,lengthA并为每个字符递增直到 '\0',因此 lengthA 是您的实际长度 string 。你不需要长度A+1

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

于 2013-03-19T16:07:20.500 回答
0

在这个循环中,您必须消除 for 的偏移量,lengthA如图StringB所示

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

并在循环之后添加一个NULL终止符

stringC[i] = '\0';
于 2013-03-19T16:08:03.597 回答
0

导入第一个字符串后,您将保留波浪号和换行符。由于您要清除一定数量的字符,因此您可以只调用getchar()一定次数,但可能有一种更优雅的方式来做到这一点。

在您设置的循环中stringC,您也索引stringB不正确。

确保您为 null terminate stringC,尽管我认为它不会破坏此特定代码。这是一个很好的做法。

最后,您在字符串长度上输出了一个额外的 +1。这不是必需的(除非您尝试将 ~ 和 ! 作为长度的一部分)。

于 2013-03-19T16:18:08.857 回答
0

雅各布有道理。

因此,要修复现有代码:

char stringC[200];

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

stringC[i]=stringB[i-lengthA];
于 2013-03-19T16:27:32.413 回答
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';
于 2013-03-19T16:29:31.880 回答
0

The following question talks about input buffer which is not getting cleared in the above code. How to clear input buffer in C? Try using a debugger and check the contents of stringB after the second scanf statement.

于 2013-03-19T16:36:41.540 回答