/*调用merge函数,实现将指针s所指的字符串的反序和正序连接*/ #include<stdio.h> #include<string.h> int main() { char str[100]; void merge(char *s);//声明要调用的函数 printf("Please enter a string:"); gets(str); merge(str); return 0; } void merge(char *s) { char *p,*q,n; n= strlen(s);//n为指针s指向的串的长度 for(p=s+n-1,q=s+n;p>=s;p--,q++) *q=*p;//反序存放 *q='\0'; //添加字符串结束标记 }可以指出这个和之前的区别吗?我学习一下
时间: 2024-02-15 17:01:21 浏览: 104
这个代码和之前的代码相比,主要有以下几个区别:
1. 在调用merge函数之前,只声明了merge函数的名称,而没有声明函数的参数类型和返回值类型。这种写法在C语言中是允许的,但是不够规范,不利于代码的维护和阅读。
2. 在调用merge函数之后,没有输出结果,无法查看程序的执行结果。建议添加一行代码,输出合并后的字符串。
3. 在merge函数中,变量n的类型为char,不太合适,因为字符串的长度通常超过了char类型的范围。建议将n的类型改为int。
4. 在merge函数中,反序存放字符串的代码没有问题,但是正序存放的代码却没有出现。按照题目的要求,merge函数应该实现将指针s所指的字符串的反序和正序连接,也就是说,需要在反序存放后,再将原字符串正序存放一遍。这个问题需要在代码中补充一下。
完善后的代码如下:
```c
#include<stdio.h>
#include<string.h>
void merge(char *s);
int main() {
char str[100];
printf("Please enter a string:");
gets(str);
merge(str);
printf("Result:%s\n", str);
return 0;
}
void merge(char *s) {
char *p,*q;
int n = strlen(s);
for(p=s+n-1,q=s+n;p>=s;p--,q++)
*q=*p;//反序存放
for(p=s,q=s+n;p<s+n;p++,q++)
*q=*p;//正序存放
*q='\0'; //添加字符串结束标记
}
```
阅读全文