我刚刚开始学习数组和字符串,我想加入两个字符串stringA
和stringB
的输入,然后将它们的值放在另一个字符串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;
}
感谢您的帮助!
答案 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
的索引是问题所在。请记住,此时索引i
是lengthA
。也许您忘记使用变量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的内容。