请用C语言编写程序,7-6 翻转单词顺序 分数 20 作者 伍建全 单位 重庆科技学院 给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。
时间: 2024-02-11 17:07:23 浏览: 103
c语言写的字符串翻转算法
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 50010
#define MAX_WORD 610
#define MAX_WORD_LEN 31
char s[MAX_LEN]; // 输入字符串
char words[MAX_WORD][MAX_WORD_LEN]; // 存储单词
int len[MAX_WORD]; // 每个单词的长度
int main() {
while (fgets(s, MAX_LEN, stdin) != NULL) {
int n = strlen(s);
int pos = 0, word_cnt = 0;
// 分割字符串并存储单词
for (int i = 0; i < n; i++) {
if (s[i] == ' ') { // 遇到空格,分割单词
if (i > pos) { // 避免连续空格出现
strncpy(words[word_cnt], &s[pos], i - pos);
words[word_cnt][i - pos] = '\0';
len[word_cnt++] = i - pos;
}
pos = i + 1; // 更新分割位置
}
}
if (n > pos) { // 处理最后一个单词
strncpy(words[word_cnt], &s[pos], n - pos - 1);
words[word_cnt][n - pos - 1] = '\0';
len[word_cnt++] = n - pos - 1;
}
// 按单词顺序输出
for (int i = word_cnt - 1; i >= 0; i--) {
printf("%s", words[i]);
if (i > 0) printf(" "); // 单词之间只输出一个空格
}
printf("\n");
}
return 0;
}
```
使用fgets函数可以接收多行输入,每次读入一行后分割字符串并存储单词,然后按单词顺序输出即可。为了避免连续空格出现,需要在遇到空格时判断前一个位置和当前位置之间是否有字符。
阅读全文