c++ - 单词翻转,递归实现。
PHPz
PHPz 2017-04-17 13:23:48
[C++讨论组]

描述

输入一个句子(一行),将句子中的每一个单词翻转后输出。

输入

只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。所谓单词指的是所有不包含空格的连续的字符。

这道题请用cin.getline输入一行后再逐个单词递归处理。

输出

翻转每一个单词后的字符串,单词之间的空格需与原文一致。

样例输入

hello world.
样例输出

olleh .dlrow


这道题怎么通过递归实现?不用递归我可以做出来,我用递归出来是这个样子的
.dlrow olleh

PHPz
PHPz

学习是最好的投资!

全部回复(4)
怪我咯
void revertWord(char *p, char *p1)
{
    char c;
    for (; p < p1; p++, p1--) {
        c = *p;
        *p = *p1;
        *p1 = c;
    }
}

void revert(char *p) 
{
    char *p1;
    while (*p && *p == ' ')
        p++;
    if (!*p)
        return;
    p1 = p;
    while (*p && *p != ' ')
        p++;
    revertWord(p1, p - 1);
    revert(p);
}

int main() 
{
    char line[] = "hello world.";
    revert(line);
    printf("%s\n", line);
    return 0;
}
大家讲道理

分割成若干个单词,对每个单词用递归

PHP中文网

从后往前递归,并在递归的过程中,对空格判断,发现空格就把剩下未递归的内容和前面的内容互换位置。

PHP中文网
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

void reverseString(char s[], int l, int len) {
    char tempStr[501];
    int tempLen = 0, i=l;
    bool isEmpty = false;
    for( ; i < len; i++) {
        if(s[i] != ' ') {
            tempStr[tempLen++] = s[i];
        } else {
            while(tempLen) {    
                printf("%c", tempStr[--tempLen]);
            }
            printf(" ");
            isEmpty = true;
            reverseString(s, i+1, len);
            break;
        }
    }
    if(!isEmpty) {
        while(tempLen) {    
            printf("%c", tempStr[--tempLen]);
        }
    }
    return;
}

int main() {
    int count = 100;
    char s[501];
    while(count--) {
        cin.getline(s, 500);
        reverseString(s, 0, strlen(s));
        printf("\n");
    }
    return 0;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号