【发布时间】:2021-12-27 15:00:07
【问题描述】:
我正在学习 c 中的字符串,并且正在做作业,要求我编写一个程序来在某些情况下替换部分字符串。这是我的源代码(未完成):
#include <stdio.h>
#include <string.h>
int main()
{
char str1[128], str2[128], str3[128];
for (int i = 0; i < 128; i++) //initialize str
{
str1[i] = 0;
str2[i] = 0;
str3[i] = 0;
}
printf("Input the first string:"); //inputs
fgets(str1, 128, stdin);
printf("Input the second string:");
fgets(str2, 128, stdin);
printf("Input the third string:");
fgets(str3, 128, stdin);
if (strncmp(str1, str2, strlen(str2) - 1) == 0) //if the first n charters match (n=length of str2)
{
printf("%s", str3); //print str3
int RemainingChar = 0;
RemainingChar = strlen(str1) - strlen(str2);
for (int i = 0; i < RemainingChar; i++)
{
printf("%c", str1[i + strlen(str2) - 1]); //print the remaining part
}
}
return 0;
}
这是它的运行方式:
Input the first string:asdfghjkl
Input the second string:asd
Input the third string:qwe
qwe
fghjkl
出现意外的换行符。我应该怎么做才能使它像这样输出:qwefghjkl?
【问题讨论】:
-
欢迎来到 SO。这有点令人费解。您似乎知道
\n存储在缓冲区中。否则这不会一起出现:strlen(str2)-1和评论(n=length of str2)。但是在打印的时候,你忘记了...... -
您可以更轻松地初始化数组:
char str1[128] = "";。这将用 0 个字节填充所有内容。 -
@Gerhardh 这个问题必须被问到为什么,人们会觉得有必要将字符串归零。
fgets()零终止输入。 -
@Gerhardh 感谢您教我一种初始化字符串的新方法。 :) 其实我还没有学过buffer,我只是有一个大概的感觉。 :(
-
其实和字符串没有直接关系。对于所有结构或数组,您可以提供比元素更少的初始值设定项。在这种情况下,所有剩余元素都将设置为 0。在我的示例中,
""只是一个空字符串,即只有一个 0 字节,所有其他字节将自动设置为 0。