本题要求编写函数,将输入字符串的前3个字符移到最后。完善并优化以下代码#include <stdio.h> #include <string.h> #define MAXS 10 void Shift( char s[] ); void GetString( char s[] ); /* 实现细节在此不表 */ int main() { char s[MAXS]; GetString(s); Shift(s); printf("%s\n", s); return 0; } void GetString( char s[]) { gets(s); } void Shift(char s[]) { char ch[30]; ch = strcpy(s,s+2); }
时间: 2024-03-07 21:50:16 浏览: 120
代码存在以下问题:
1. 使用了不安全的 gets 函数,应该改用 fgets 函数。
2. Shift 函数中,使用了一个字符数组 ch,但是并没有使用到,而且将 s 的前三个字符移动到 s 的末尾应该使用循环实现。
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAXS 10
void Shift(char s[]);
int main() {
char s[MAXS];
fgets(s, MAXS, stdin);
Shift(s);
printf("%s\n", s);
return 0;
}
void Shift(char s[]) {
int len = strlen(s);
char tmp;
for (int i = 0; i < 3; i++) {
tmp = s[i];
for (int j = i; j < len - 1; j += 3) {
s[j] = s[j + 3];
}
s[len - 3 + i] = tmp;
}
}
```
修改后的 Shift 函数中,首先获取字符串的长度 len,然后使用两层循环,将前三个字符依次移动到字符串的末尾。其中,外层循环控制移动的字符个数,内层循环控制字符的移动位置。
阅读全文