찾다

 >  Q&A  >  본문

c++ - 单词翻转,递归实现。

描述

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

输入

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

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

输出

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

样例输入

hello world.
样例输出

olleh .dlrow


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

PHPzPHPz2806일 전1203

모든 응답(4)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 13:25:48

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

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:25:48

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:25:48

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:25:48

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

    회신하다
    0
  • 취소회신하다