#include <stdio.h> #include <string.h> char* reverse(char* s) { int len = strlen(s); for (int i = 0, j = len - 1; i < j; i++, j--) { char tmp = s[i]; s[i] = s[j]; s[j] = tmp; } return s; } int main() { char str[200]; scanf("%s", str); printf("%s", reverse(str)); return 0; } 优化这个代码,使其代码量更小性能更好
时间: 2024-02-06 09:02:59 浏览: 29
这个代码已经很简洁了,不过还有一些小优化可以做:
1. 可以使用 `size_t` 类型代替 `int` 类型,因为 `strlen` 函数返回的是 `size_t` 类型。
2. 在 `for` 循环中,可以使用前缀自增和后缀自减运算符,让代码更加简洁。
3. 在 `printf` 函数中,可以使用 `%s\n` 代替 `%s`,让输出更加规范。
优化后的代码如下:
```c
#include <stdio.h>
#include <string.h>
char* reverse(char* s) {
size_t len = strlen(s);
for (size_t i = 0, j = len - 1; i < j; ++i, --j) {
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
return s;
}
int main() {
char str[200];
scanf("%s", str);
printf("%s\n", reverse(str));
return 0;
}
```
这样代码更加简洁,性能也更好。
相关问题
#include <stdio.h> #include <string.h> void reverse(char *str) { int len = strlen(str); for (int i = 0; i < len/2; i++) { char temp = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = temp; } } int main() { char str[] = "Hello World!"; printf("Original String: %s\n", str); reverse(str); printf("Reversed String: %s\n", str); return 0; }纠错
这段代码的实现是将一个字符串进行翻转,并输出翻转后的结果。代码中出现了一个小错误,应该在开头添加一个换行符,即将第一行改为:
```
#include <stdio.h>
#include <string.h>
```
同时,建议在输出翻转后的字符串时,也加上一个换行符,以便更好地显示输出结果。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
int len = strlen(str);
for (int i = 0; i < len/2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main() {
char str[] = "Hello World!";
printf("Original String: %s\n", str);
reverse(str);
printf("Reversed String: %s\n\n", str);
return 0;
}
```
修改:#include <stdio.h> #include <string.h> #include <stdlib.h> void reverse(char *str) { int len = strlen(str); char *start = str; char *end = str + len - 1; char temp; while(start < end) { temp = *start; *start = *end; *end = temp; start++; end--; } } int main() { char a[100]; printf("输入句子"); gets(a); puts(a); reverse(a); printf("反转后是:%s",a); }
这段代码存在一些问题,gets函数已经被弃用,应该改用fgets或者scanf等安全的输入函数。此外,在输入字符串时没有限制长度,可能会导致缓冲区溢出。另外,reverse函数没有对空字符串进行处理,可能会导致程序崩溃。以下是修正后的代码:
```
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
if (str == NULL || *str == '\0') { // 处理空字符串
return;
}
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
char temp;
while (start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char a[100];
printf("输入句子:");
fgets(a, sizeof(a), stdin); // 使用fgets函数读取输入
printf("原始字符串是:%s", a);
reverse(a);
printf("反转后是:%s", a);
return 0;
}
```