输入一句英语,编写程序,利用指针将句中所有单词的顺序颠倒输出。输入为在一行内总长度不超过80的字符串,该字符串由若干单词组成,假设其中单词是由英文字母组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格(末尾无标点符号),要求定义指针完成程序。C语言【样例输入】 Hello World Here I Come 【样例输出】 Come I Here World Hello
时间: 2024-03-20 09:40:18 浏览: 48
好的,我来给您编写一个程序,实现英语句子单词顺序颠倒输出的功能:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
void reverse(char *begin, char *end) {
char temp;
while (begin < end) {
temp = *begin;
*begin++ = *end;
*end-- = temp;
}
}
int main() {
char sentence[MAX_LEN];
char *word_begin = NULL, *word_end = NULL;
fgets(sentence, MAX_LEN, stdin);
sentence[strlen(sentence) - 1] = '\0';
reverse(sentence, sentence + strlen(sentence) - 1);
word_begin = sentence;
while (*word_begin) {
while (*word_begin == ' ') {
word_begin++;
}
word_end = word_begin;
while (*word_end != ' ' && *word_end != '\0') {
word_end++;
}
reverse(word_begin, word_end - 1);
word_begin = word_end;
}
printf("%s\n", sentence);
return 0;
}
```
程序的详细解释如下:
1. 定义了一个长度为80的字符数组存储输入的句子,以及两个指针变量`word_begin`和`word_end`。
2. 通过`fgets()`函数从标准输入流中读取输入的句子,并将句子末尾的换行符替换成空字符。
3. 调用`reverse()`函数,将整个句子进行颠倒,即让最后一个单词排在最前面。
4. 将指针`word_begin`指向句子的首字母,然后循环遍历句子中的每个单词,即每个以空格分隔的子字符串。
5. 在内层循环中,跳过单词之间的空格,将指针`word_end`指向单词的末尾字符,即下一个空格或者字符串的结尾。
6. 调用`reverse()`函数,将指针`word_begin`和`word_end`之间的子串进行颠倒。
7. 将指针`word_begin`指向下一个单词的首字母。
8. 输出颠倒顺序后的句子。
其中,`reverse()`函数的作用是将指定范围内的字符进行颠倒,具体实现为使用一个临时变量`temp`来交换左右两端的字符。在本程序中,我们将整个句子进行颠倒,然后再颠倒每个单词,最终得到的就是单词顺序颠倒的句子。
阅读全文