请完成字符串拷贝程序 #include <stdio.h> void mystrcpy(char s1[], char s2[]); int main() { char s[] = "Hello!"; char s1[20]; mystrcpy(s1, s); puts(s1); return 0; } void mystrcpy(char s1[], char s2[]) { char *p = (1) ; int len = (2) ; while (*p) { s1[ (3) ] = *p; (4) ; } s1[ (5) ] = '\0'; }
时间: 2024-03-27 19:36:52 浏览: 40
完整的字符串拷贝程序如下:
```
#include <stdio.h>
void mystrcpy(char s1[], char s2[]);
int main() {
char s[] = "Hello!";
char s1[20];
mystrcpy(s1, s);
puts(s1);
return 0;
}
void mystrcpy(char s1[], char s2[]) {
char *p = s2; // (1) 指向s2的首地址
int len = 0;
while (s2[len] != '\0') { // (2) 计算s2的长度
len++;
}
for (int i = 0; i <= len; i++) { // (3) 复制s2的每一个字符到s1
s1[i] = *(p + i);
}
}
```
解析:
1. 定义一个指针p,指向字符串s2的首地址。
2. 计算字符串s2的长度,即遍历整个字符串直到遇到结束符'\0'。
3. 使用for循环遍历s2的每一个字符,将其复制到s1对应位置上,注意最后还需要复制结束符'\0'。
4. 在循环体中,每复制一个字符后,指针p需要指向下一个字符。
5. 最后在s1的末尾添加结束符'\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`,以表示字符串的结束。
编写函数void strcopy(char s1[], char s2[], int m, int n)将s1串中下标m开始的n个子串拷贝到s2中,要求从键盘输入s1串,m和n,调用函数完成拷贝后输出s2。
下面是函数的实现:
```c
#include <stdio.h>
#include <string.h>
void strcopy(char s1[], char s2[], int m, int n) {
int len = strlen(s1);
int i, j;
for (i = m, j = 0; i < m + n && i < len; i++, j++) {
s2[j] = s1[i];
}
s2[j] = '\0';
}
int main() {
char s1[100], s2[100];
int m, n;
printf("请输入字符串s1、起始下标m和子串长度n:\n");
scanf("%s %d %d", s1, &m, &n);
strcopy(s1, s2, m, n);
printf("拷贝后的字符串s2为:%s\n", s2);
return 0;
}
```
函数的实现过程比较简单,主要是利用循环将s1串中下标m开始的n个字符拷贝到s2中。需要注意的是,由于s2是一个字符串,所以在最后要手动添加一个'\0'字符,表示字符串的结束。