#include <stdio.h> #include <string.h> int main(void) { char s1[80],s2[40]; int i = 0,j = 0; scanf("%s",s1); scanf("%s",s2); while(s1[i]!= '\0' ) i++; while(s2[j]!= '\0' ) /***********found***********/ s1[i+1]=s2[j]; /***********found***********/ s1[i]='\0'; printf("%s",s1); return 0; }
时间: 2023-07-18 11:44:03 浏览: 40
这是一个用 C 语言实现的字符串拼接程序。程序会先读入两个字符串 s1 和 s2,然后将 s2 拼接到 s1 后面,最后输出拼接后的结果。
程序的具体实现是通过两个 while 循环来实现的。第一个 while 循环用来找到字符串 s1 的结尾位置,即遍历 s1 直到找到字符串结束符 '\0'。找到结尾位置后,第二个 while 循环用来将字符串 s2 的字符逐一拼接到 s1 的结尾位置后面,即将 s2 的第一个字符拼接到 s1 的结尾位置后面,第二个字符拼接到 s1 的结尾位置后面第二个位置,以此类推。拼接完成后,程序将 s1 的结尾位置重新赋值为 '\0',以保证 s1 成为一个以 '\0' 结尾的字符串。
需要注意的是,在拼接 s2 的字符到 s1 的结尾位置后面时,应该将 s2 的第一个字符拼接到 s1 的第 i 个位置,而不是 i+1 的位置。因为 i 已经指向了 s1 的结尾位置,新拼接的字符应该从结尾位置的下一个位置开始,即第 i 个位置。所以正确的代码应该是:
```
while(s2[j]!= '\0' ) {
s1[i]=s2[j];
i++;
j++;
}
```
相关问题
1. 编一个函数,将字符串s2连接到s1后面,不用strcat函数。(请填空)#include <stdio. h> #include <string. h> void mainO ( char s1[80], s2[40]; int i=0, j=0; gets(s1) ; gets(s2) ; /*查找定位s1的连接点(即结束符) */ 8灵静话/*将s2逐个字符复制到s1后,对应下标后移*/ /*手工对s1加结束符*/ printf( "The new string is:%s” ,s1);
#include <stdio.h>
#include <string.h>
void mystrcat(char s1[], char s2[]) {
int len1 = strlen(s1);
int len2 = strlen(s2);
int i, j;
for (i = len1, j = 0; j < len2; i++, j++) {
s1[i] = s2[j];
}
s1[i] = '\0';
}
int main() {
char s1[80], s2[40];
printf("Enter string s1: ");
gets(s1);
printf("Enter string s2: ");
gets(s2);
mystrcat(s1, s2);
printf("The new string is: %s\n", s1);
return 0;
}
#include <stdio.h> #include <string.h> void myrevstr(char s1[], char s2[]); //将字符串s2反转后存放在s1中 void myrevstr(char s1[], char s2[]) { int pos = 0; char *p = s2+strlen(s2)-1; while (p>= (1) ) { s1[pos] = *p; (2) ; pos++; } (3) ; } int main() { char s1[80]; myrevstr(s1, "HelloW"); printf("%s", s1);//输出为WolleH return 1; }
完善程序如下:
```
#include <stdio.h>
#include <string.h>
void myrevstr(char s1[], char s2[]); //将字符串s2反转后存放在s1中
void myrevstr(char s1[], char s2[]) {
int pos = 0;
char *p = s2 + strlen(s2) - 1;
while (p >= s2) {
s1[pos] = *p;
p--;
pos++;
}
s1[pos] = '\0';
}
int main() {
char s1[80];
myrevstr(s1, "HelloW");
printf("%s", s1);//输出为WolleH
return 0;
}
```
其中,需要注意的点有:
1. 在 `while` 循环中,判断条件为 `p>=s2`,即指针 `p` 没有超过字符串 `s2` 的起始地址。
2. 在循环中,先将 `p` 所指向的字符赋值给 `s1` 中的对应位置,再让指针 `p` 向前移动一位。
3. 循环结束后,需要在 `s1` 的末尾添加一个空字符 `\0`,以表示字符串的结束。
阅读全文