用正则逐段匹配非空白单词并逆序,保留原句中所有空格。
OJ: noi_openjudge
题目 ID: ch0107-27
难度:入门
标签:字符串正则python
日期: 2026-07-30 23:01
题意
逐个反转句子中的单词,单词之间的空格必须与原句一致。
思路
正则 \S+ 只匹配连续的非空白字符。re.sub 仅替换这些单词片段为其逆序,未匹配的空格会原样保留。
代码
Python代码
python
import re
sentence = input()
print(re.sub(r"\S+", lambda match: match.group()[::-1], sentence))C++代码
cpp
#include <cstdio>
#include <cstring>
char str[5000];
int idx = 0;
char tmp[105];
int flag = 1;
int next_word(){
while(1){
if(str[flag] != ' ' )
break;
else {
printf(" ");
}
flag++;
}
if( flag == idx+1){
return -1;
}
int cnt = 0;
while(1) {
if( str[flag] == ' ' || flag == idx+1){
tmp[cnt] = '\0';
return 0;
}
else {
tmp[cnt++] = str[flag];
flag++;
}
}
return 0;
}
int main(){
char t;
while ( scanf("%c",&t)!=EOF) {
if ( t == '\n' || t == '\r')
break;
str[++idx] = t;
}
while(1){
if( next_word() == -1){
break;
}
int len = strlen(tmp);
int i;
for (i=len-1;i>=0;i--){
printf("%c",tmp[i]);
}
}
return 0;
}复杂度
时间和输出空间复杂度均为
总结
既要转换单词又要保留分隔符时,按匹配片段替换很合适。