7-6 翻转单词顺序 分数 20 作者 伍建全 单位 重庆科技学院 给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。
时间: 2024-02-11 07:07:22 浏览: 84
以下是Python3代码实现:
```python
import sys
for line in sys.stdin:
# 去除行末空格
line = line.strip()
# 按空格分割字符串
words = line.split()
# 翻转单词顺序并拼接成字符串
new_line = ' '.join(words[::-1])
# 输出翻转后的字符串
print(new_line)
```
使用sys.stdin可以接收多行输入,每次读入一行后去除行末空格,按空格分割字符串,翻转单词顺序并拼接成字符串,最后输出即可。
相关问题
用c语言编写如下程序:7-6 翻转单词顺序 分数 10 作者 伍建全 单位 重庆科技学院 给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过500
好的,下面是C语言实现翻转单词顺序的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 500
void reverse(char *start, char *end)
{
while (start < end) {
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
void reverseWords(char *str)
{
char *word_start = NULL;
char *word_end = NULL;
int len = strlen(str);
reverse(str, str + len - 1);
for (int i = 0; i < len; i++) {
if (str[i] != ' ' && !word_start)
word_start = &str[i];
if (str[i] == ' ' && word_start) {
word_end = &str[i - 1];
reverse(word_start, word_end);
word_start = NULL;
}
}
if (word_start && !word_end)
word_end = &str[len - 1];
reverse(word_start, word_end);
}
int main()
{
char str[MAX_LEN];
while (fgets(str, MAX_LEN, stdin)) {
reverseWords(str);
printf("%s", str);
}
return 0;
}
```
程序中使用了两个函数,`reverse()`函数用于翻转字符串,`reverseWords()`函数用于翻转单词顺序。程序首先将整个字符串翻转,然后再对每个单词进行翻转。最后再将整个字符串翻转回来,即可得到翻转单词顺序后的字符串。
程序可以一次性读入多行字符串,并对每行字符串进行翻转。输出时去掉多余的空格,只在每个单词之间以1个空格间隔,输出的每行末尾没有空格。
7-6 翻转单词顺序 分数 10 全屏浏览题目 切换布局 作者 伍建全 单位 重庆科技学院 给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格。 输入样例: 在这里给出一组输入。例如: student. a am I World Hello 输出样例: 在这里给出相应的输出。例如: I am a student. Hello World
这道题可以先将整个字符串翻转,然后再将每个单词翻转一次,最后去掉多余的空格即可。具体实现如下:
C++ 代码:
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
string line;
while (getline(cin, line)) // 逐行读入字符串
{
reverse(line.begin(), line.end()); // 翻转整个字符串
int start = 0, end = 0;
while (end < line.size()) // 翻转每个单词
{
if (line[end] == ' ')
{
reverse(line.begin() + start, line.begin() + end);
start = end + 1; // 下一个单词的起始位置
}
end++;
}
reverse(line.begin() + start, line.end()); // 翻转最后一个单词
// 去掉多余的空格
int i = 0, j = 0;
while (j < line.size())
{
if (line[j] == ' ')
{
if (i > 0 && line[i - 1] != ' ') cout << ' '; // 输出单词间的空格
j++;
}
else
{
line[i++] = line[j++];
}
}
if (i > 0 && line[i - 1] == ' ') i--; // 去掉末尾的空格
line.resize(i);
reverse(line.begin(), line.end()); // 最后再整个翻转回来
cout << line << endl;
}
return 0;
}
```
Python 代码:
```python
while True:
try:
line = input().strip()
except:
break
line = line[::-1] # 翻转整个字符串
words = line.split()
for i in range(len(words)):
words[i] = words[i][::-1] # 翻转每个单词
line = ' '.join(words)
# 去掉多余的空格
i, j = 0, 0
while j < len(line):
if line[j] == ' ':
if i > 0 and line[i-1] != ' ':
print(' ', end='') # 输出单词间的空格
j += 1
else:
line = line[:i] + line[j] + line[i:j] + line[j+1:]
i += 1
j += 1
if i > 0 and line[i-1] == ' ': # 去掉末尾的空格
line = line[:i-1]
line = line[::-1] # 最后再整个翻转回来
print(line)
```
时间复杂度:$O(nm)$,其中 $n$ 是字符串的总长度,$m$ 是单词的个数。
阅读全文