从键盘上输入2个字符串s1和s2,然后将两个字符串连接起来输出。要求不能使用strcat()函数。
#include <stdio.h>
#include <stdlib.h>
int main() {
char s1[100], s2[100];
int i, j;
printf("请输入第一个字符串:");
fgets(s1, 100, stdin); // 从输入流中读取第一个字符串
printf("请输入第二个字符串:");
fgets(s2, 100, stdin); // 从输入流中读取第二个字符串
// 找到s1的末尾
for (i = 0; s1[i] != '\0'; ++i);
// 拼接s2到s1后面
for (j = 0; s2[j] != '\0'; ++j, ++i) {
s1[i] = s2[j];
}
s1[i] = '\0'; // 在连接的字符串末尾添加字符串结束符
printf("连接后的字符串为:%s", s1); // 输出连接后的字符串
return 0;
}
用scanf输入到字符型的数组里,然后直接输出可否?
不知道你这个问题是否已经解决, 如果还没有解决的话:strcat(A,B),把B串连接到A串后面,A的值变成连接后的样子
代码如下
int main(void)
{
char s1[1000] = {0};
char s2[1000] = {0};
int n; char c;
scanf("%d", &n);//输入要插入的位置
c = getchar();//消除回车符号
gets_s(s1);
gets_s(s2);
char x[100] = {0};//s1后面的部分
char y[100] = { 0 };
for (int i = n, j = 0;i<strlen(s1); i++, j++)
{
x[j] = s1[i];//s1后面的部分
}
//printf("输出s1后面的部分为:%s\n", x);//输出s1后面的部分
for (int i = 0,j=0; i < n; i++,j++)
{
y[j]=s1[i];
}
//printf("s1的前面部分为:%s", y);
strcat(y, s2);
strcat(y, x);
printf("%s", y);
return 0;
}
可以使用指针来完成字符串的拼接,具体步骤如下:
1.定义两个字符数组,分别存储输入的两个字符串;
2.定义一个字符数组,作为拼接结果;
3.定义两个指针变量,分别指向拼接结果数组和第一个输入字符串;
4.将第一个输入字符串依次拷贝到拼接结果数组中;
5.将第二个输入字符串依次拷贝到拼接结果数组中,注意此时要拷贝到第一个字符串结束的位置;
6.输出拼接结果数组。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char s1[100], s2[100], result[200];
printf("Please input the first string: ");
scanf("%s", s1);
printf("Please input the second string: ");
scanf("%s", s2);
char* p = result, *q = s1;
while (*q != '\0') {
*p++ = *q++;
}
q = s2;
while (*q != '\0') {
*p++ = *q++;
}
*p = '\0';
printf("The result is: %s", result);
return 0;
}
这里采用两个指针变量,一个指向拼接结果数组,一个指向第一个输入字符串,可以通过指针运算实现字符的拷贝,避免了使用strcat()函数的限制。同时,拼接结果数组可以预先定义足够的长度,避免内存空间的非法使用。