zzuli-1858-单词翻转

本文介绍了一个简单的程序设计问题——单词翻转。通过两种不同的实现方式(递归和栈),解决了将句子中每个单词顺序反转的问题,同时保持了单词间的空格不变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1858: 单词翻转

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 254   Solved: 141

Submit Status Web Board

Description

小明终于等来了好朋友的来信,但打开来信就傻眼了,居然看不懂,原来好朋友把信中的每个单词都翻转了顺序,例如“Happy”在朋友的信里变成了“yppaH”。请你编写程序帮助小明还原来信内容吧。

Input

输入一个字符串,以回车结束。该字符串长度不超过100,包含多个单词,单词之间有一个或多个空格。

Output

输出一行,即单词翻转后的字符串,注意每对单词之间的空格数量保持不变。

Sample Input

yppaH wen raey

Sample Output

Happy new year


递归版
#include <bits/stdc++.h>

using namespace std;

char str[1100];
int dfs(int step , int len)
{
    if(str[step] == ' ' || step == len)
        return step;
    int idx = dfs(step+1 , len);
    printf("%d",str[step]);
    return idx;
}
int main()
{
    while(gets(str))
    {
        int len = strlen(str);
        for(int i=0; i<len; )
        {
            if(str[i] == ' ')
            {
                printf(" ");
                i += 1;
            }
            else
                i = dfs(i , len);
 
        }
	printf("\n");
    }
    return 0;
}






栈版 
#include <bits/stdc++.h>

using namespace std;

int main()
{
    char str[150];
    while(gets(str))
    {
        int len=strlen(str);
        for(int i=0;i<len;)
        {
            if(!isalpha(str[i]))
            {
                printf("%c",str[i++]);
                continue;
            }

            stack<char>  st;
            while(!st.empty())
                st.pop();

            while(isalpha(str[i]) && i<len)
            {
                st.push(str[i]);
                i++;
            }

            while(!st.empty())
            {
                printf("%c",st.top());
                st.pop();
            }
        }
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值