输入一句英语,编写程序,利用指针将句中所有单词的顺序颠倒输出。输入为在一行内总长度不超过80的字符串,该字符串由若干单词组成,假设其中单词是由英文字母组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格(末尾无标点符号),要求定义指针完成程序。
时间: 2024-03-20 13:40:53 浏览: 70
好的,我来帮你写这个程序。以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80 // 字符串最大长度
void reverse(char *start, char *end) { // 反转单词
char temp;
while (start < end) {
temp = *start;
*start++ = *end;
*end-- = temp;
}
}
void reverseWords(char *s) {
char *word_start = NULL; // 指向单词的开始位置
char *temp = s; // 指向当前字符
while (*temp) {
if (word_start == NULL && *temp != ' ') { // 找到单词的开始位置
word_start = temp;
}
if (word_start != NULL && (*(temp + 1) == ' ' || *(temp + 1) == '\0')) { // 找到单词的结束位置
reverse(word_start, temp);
word_start = NULL;
}
temp++;
}
reverse(s, temp - 1); // 反转整个字符串
}
int main() {
char str[MAX_LEN + 1];
fgets(str, MAX_LEN + 1, stdin); // 从标准输入读入字符串
str[strlen(str) - 1] = '\0'; // 去掉末尾的换行符
reverseWords(str);
printf("%s\n", str); // 输出反转后的字符串
return 0;
}
```
主要思路是先反转每个单词,再反转整个字符串即可。使用两个指针,一个指向单词的开始位置,一个指向当前字符,扫描整个字符串,找到每个单词的开始和结束位置,然后反转即可。最后反转整个字符串并输出。
阅读全文