设计一个函数反转单词前缀 函数原型: void reversePrefix(char *word, char ch); 如: 输入:abcdefd d 输出:dcbaefd 解释:字符d第一次出现在下标3, 反转从下标0到下标3(含下标3)的这段字符 输入:xyxzxe z 输出:zxyxxe 输入:abcd z 输出:abcd 解释:字符z不在这个字符串中,则原字符串不用翻转,原样输出。此函数要在另个函数之中调用。void test02函数有什么问题,为什么不能输出最后反转后的字符串?应该怎么改?void test02() { char word[100],ch; scanf("%s",word); getchar(); scanf("%s",&ch); reversePrefix(word,ch); printf("%s\n",word); }
时间: 2023-12-03 19:47:03 浏览: 68
以下是反转单词前缀的函数实现:
```c
void reversePrefix(char *word, char ch) {
int len = strlen(word);
int i, j;
for (i = 0; i < len; i++) {
if (word[i] == ch) { // 找到第一个出现字符 ch 的位置
for (j = 0; j <= (i-1)/2; j++) { // 反转从下标0到下标i(含下标i)的这段字符
char tmp = word[j];
word[j] = word[i-j];
word[i-j] = tmp;
}
break;
}
}
}
```
函数逻辑是先遍历字符串,找到第一个出现字符 ch 的位置,然后反转从下标0到下标i(含下标i)的这段字符。
test02 函数的问题是在读入字符 ch 后没有清空输入缓冲区,因此在读入字符串时会读入上次输入的回车符,导致无法正确输出结果。可以在读入字符 ch 后加上一行 `getchar()`,将回车符从输入缓冲区中清除。
修改后的 test02 函数如下:
```c
void test02() {
char word[100],ch;
scanf("%s",word);
getchar();
scanf("%c",&ch);
getchar(); // 清空输入缓冲区
reversePrefix(word,ch);
printf("%s\n",word);
}
```
阅读全文