s1e22动动手strcat
#include <stdio.h>#define MAX 1024
int main()
{
char str1;
char str2;
char str3;
char *target1 = str1;
char *target2 = str2;
char *target3 = str3;
int i=0;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
while ((*target3++=*target1++) != '\n')
{
i++;
}
while ((*(target3+i)=*target2++) != '\0')
{
i++ ;
}
printf("%d\n",i);
printf("%c\n",*(target3+3));
printf("%c\n",*(target3+2));
printf("连接后的结果是:%c%c%c%c\n", str3,str3,str3,str3);
return 0;
}
str1和str2都已经加进去str3了,为何只打印了str1。我已经想了一天了,要崩溃了,有没有大佬帮帮忙
你的代码存在一些问题。首先,你声明了str1、str2和str3为字符变量,而不是字符数组。这样会导致在使用fgets函数时出现段错误。正确的声明方式应该是:
char str1;
char str2;
char str3;
其次,在将str1和str2的内容拼接到str3中时,你通过target1和target2指针来逐个字符复制,但是你没有正确初始化target1和target2指针,也没有将它们指向str1和str2。正确的方式应该是:
char *target1 = str1;
char *target2 = str2;
char *target3 = str3;
此外,你在打印连接后的结果时使用了错误的输出格式,应该使用%s而不是%c。应该修改为:
printf("连接后的结果是:%s\n", str3);
最后,你需要注意的是,str1和str2的末尾有换行符'\n',在拼接时需要跳过它们。应该修改为:
while ((*target3++ = *target1++) != '\n')
{
i++;
}
target3--; // 跳过第一个字符串的末尾换行符
while ((*(target3+i) = *target2++) != '\0')
{
i++;
}
修改后的完整代码如下:
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char str3;
char *target1 = str1;
char *target2 = str2;
char *target3 = str3;
int i = 0;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
while ((*target3++ = *target1++) != '\n')
{
i++;
}
target3--; // 跳过第一个字符串的末尾换行符
while ((*(target3+i) = *target2++) != '\0')
{
i++;
}
printf("连接后的结果是:%s\n", str3);
return 0;
}
希望能帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-28 20:54
你的代码存在一些问题。首先,你声明了str1、str2和str3为字符变量,而不是字符数组。这样会导致在使用fget ...
你的代码打印结果还是只有str1,还是错的呀 代码小白斌少 发表于 2023-12-29 12:50
你的代码打印结果还是只有str1,还是错的呀
非常抱歉,看来我犯了一个错误。在将str1和str2的内容拼接到str3时,我们需要使用字符串连接函数strcat而不是逐个字符复制。请将代码修改为以下形式:
#include <stdio.h>
#include <string.h>
#define MAX 1024
int main(){
char str1;
char str2;
char str3; // 结果最大长度是两个字符串的长度之和
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
str1 = '\0'; // 移除输入字符串中的换行符
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
str2 = '\0'; // 移除输入字符串中的换行符
strcpy(str3, str1); // 将str1复制到str3
strcat(str3, str2); // 将str2追加到str3
printf("连接后的结果是:%s\n", str3);
return 0;
}
这段代码使用了`strcpy`函数将str1复制到str3,然后使用`strcat`函数将str2追加到str3的末尾。最后,我们使用printf打印出连接后的结果。
希望这次能够解决你的问题!如果还有任何疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-29 12:51
非常抱歉,看来我犯了一个错误。在将str1和str2的内容拼接到str3时,我们需要使用字符串连接函数strcat而 ...
题目就是不能用strcat函数。为什么不能逐个复制字符呢? 代码小白斌少 发表于 2023-12-29 12:58
题目就是不能用strcat函数。为什么不能逐个复制字符呢 ...
非常抱歉之前给出的答案有误。
如果你不想使用strcat函数,那么可以通过逐个复制字符的方式来实现字符串的拼接。
以下是修改后的代码:
#include <stdio.h>
#define MAX 1024
int main() {
char str1;
char str2;
char str3;// 结果最大长度是两个字符串的长度之和
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
str1 = '\0'; // 移除输入字符串中的换行符
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
str2 = '\0'; // 移除输入字符串中的换行符
int i = 0;
while (str1 != '\0') {
str3 = str1;
i++;
}
int j = 0;
while (str2 != '\0') {
str3 = str2;
j++;
}
str3 = '\0';
printf("连接后的结果是:%s\n", str3);
return 0;
}
在这段代码中,我们通过循环逐个复制字符的方式将str1和str2的内容复制到str3中。最后,我们添加了字符串结束标志'\0',并使用printf打印出连接后的结果。
希望这次能够满足你的要求!如果还有任何疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-29 12:59
非常抱歉之前给出的答案有误。
如果你不想使用strcat函数,那么可以通过逐个复制字符的方式来实现字符串 ...
为什么用指针逐个复制字符就会出错呢? 代码小白斌少 发表于 2023-12-29 13:01
为什么用指针逐个复制字符就会出错呢?
非常抱歉之前的回答有误。使用指针逐个复制字符的方式是可以实现字符串拼接的,但是你之前的代码存在一些问题。
首先,你声明了str1、str2和str3为字符变量,而不是字符数组。这将导致在使用fgets函数时出现段错误。正确的声明方式应该是:
char str1;
char str2;
char str3;// 结果最大长度是两个字符串的长度之和
其次,在将str1和str2的内容拼接到str3中时,你通过target1和target2指针来逐个字符复制,但是你没有正确初始化target1和target2指针,也没有将它们指向str1和str2。正确的方式应该是:
char *target1 = str1;
char *target2 = str2;
char *target3 = str3;
然后,在循环内部,你需要将target3、target1和target2指针逐一增加,以复制字符和移动指针位置。修改后的循环应该如下:
while (*target1 != '\0') {
*target3 = *target1;
target1++;
target3++;
}
while (*target2 != '\0') {
*target3 = *target2;
target2++;
target3++;
}
最后,如果你想要在连接后的结果上直接进行打印,可以将str3作为一个字符串进行输出,而不是单个字符。修改打印语句为:
printf("连接后的结果是:%s\n", str3);
请注意,以上修改后的代码完整示例如下:
#include <stdio.h>
#define MAX 1024
int main() {
char str1;
char str2;
char str3;// 结果最大长度是两个字符串的长度之和
char *target1 = str1;
char *target2 = str2;
char *target3 = str3;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
while (*target1 != '\0') {
*target3 = *target1;
target1++;
target3++;
}
while (*target2 != '\0') {
*target3 = *target2;
target2++;
target3++;
}
*target3 = '\0';
printf("连接后的结果是:%s\n", str3);
return 0;
}
希望这次能够满足你的要求!如果还有任何疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]