首页 > 单词翻转,递归实现。

单词翻转,递归实现。

描述

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

输入

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

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

输出

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

样例输入

hello world.
样例输出

olleh .dlrow


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


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

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


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


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;
}
【热门文章】
【热门文章】