c语言编程 【问题描述】 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 【输入形式】 一个英文句子,可以带标点 【输出形式】 将句子中单词顺序翻转但是单词内字符顺序不变输出 【样例输入】 I am a student. 【样例输出】 student. a am I 【样例说明】 为简单起见,标点符号和普通字母一样处理
时间: 2023-11-29 21:06:51 浏览: 34
以下是一个C语言的程序,可以实现输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变的功能:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void reverse_str(char *start, char *end) {
while (start < end) {
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
void reverse_word(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
// 翻转整个句子
reverse_str(start, end);
// 翻转每个单词
start = end = str;
while (*start) {
if (*start == ' ') {
start++;
end++;
} else if (*end == ' ' || *end == '\0') {
reverse_str(start, --end);
start = ++end;
} else {
end++;
}
}
}
int main() {
char str[MAX_LEN];
fgets(str, MAX_LEN, stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
reverse_word(str);
printf("%s\n", str);
return 0;
}
```
该程序中使用了两个函数 `reverse_str` 和 `reverse_word`,分别用来翻转字符串和翻转每个单词。在 `reverse_word` 函数中,首先翻转整个句子,然后再翻转每个单词。这里利用了两个指针 `start` 和 `end` 来标记每个单词的起始和结束位置,遇到空格则将 `start` 指针后移,遇到单词结束则将 `end` 指针前移,然后将该单词翻转。
希望这个程序能够帮助到您。