|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求 :使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来
问题:在录入字符串时结尾会带上一个回车符,且这个回车符不会消失,它会依然存在缓冲区里面,这就导致第二个字符串第一个位置存放的是回车符,想问怎么能将这个回车符删掉,尝试过在第一个fgets后面加一个getchar(),但并没有用,望大佬指点
- #include <stdio.h>
- #define MAX 1024
- int main() {
- char str1[MAX];
- char str2[MAX];
- char *st1 = str1, *st2 = str2;
- int length = 0;
- printf("请输入第一个字符串:");
- fgets(str1, MAX, stdin);
- printf("请输入第二个字符串:");
- fgets(str2, MAX, stdin);
- while (1) {
- if ((*st1) == '\0') {
- while ((*st1++ = *st2++) != '\0');
- break;
- }
- st1++;
- }
- printf("----现在str1的内容是:%s\n", str1);
- return 0;
- }
复制代码
当您希望避免使用strcat函数时,可以手动实现字符串的连接。您可以使用指针来遍历字符串,并将第二个字符串的字符逐个复制到第一个字符串的末尾,直到遇到字符串结束符'\0'。
下面是修改后的代码示例:
- #include <stdio.h>
- #include <string.h>
- #define MAX 1024
- int main() {
- char str1[MAX];
- char str2[MAX];
- char *st1 = str1, *st2 = str2;
- printf("请输入第一个字符串:");
- fgets(str1, MAX, stdin);
- printf("请输入第二个字符串:");
- fgets(str2, MAX, stdin);
- // 移除str1末尾的回车符
- str1[strcspn(str1, "\n")] = '\0';
- // 找到str1的末尾
- while (*st1 != '\0') {
- st1++;
- }
- // 将str2的字符逐个复制到str1的末尾
- while (*st2 != '\0') {
- *st1 = *st2;
- st1++;
- st2++;
- }
- *st1 = '\0'; // 添加字符串结束符
- printf("----现在str1的内容是:%s\n", str1);
- return 0;
- }
复制代码
在这个代码中,我们首先使用strcspn函数移除str1末尾的回车符。然后,我们使用指针st1来遍历str1,直到指针指向字符串结束符'\0'。接下来,我们使用指针st2来遍历str2,并将其字符逐个复制到st1指向的位置,然后将st1和st2同时向后移动。最后,我们在st1指向的位置添加字符串结束符'\0'。
这样就实现了将str2连接到str1末尾的功能,而不使用strcat函数。
|
|