单词翻转

GitHub跳转原题关系图返回列表

用正则逐段匹配非空白单词并逆序,保留原句中所有空格。

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;
}

复杂度

时间和输出空间复杂度均为 O(n)O(n)

总结

既要转换单词又要保留分隔符时,按匹配片段替换很合适。