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