描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。所谓单词指的是所有不包含空格的连续的字符。
这道题请用cin.getline输入一行后再逐个单词递归处理。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world.样例输出
olleh .dlrow
这道题怎么通过递归实现?不用递归我可以做出来,我用递归出来是这个样子的.dlrow olleh
学习是最好的投资!
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; }
分割成若干个单词,对每个单词用递归
从后往前递归,并在递归的过程中,对空格判断,发现空格就把剩下未递归的内容和前面的内容互换位置。
#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; }
分割成若干个单词,对每个单词用递归
从后往前递归,并在递归的过程中,对空格判断,发现空格就把剩下未递归的内容和前面的内容互换位置。