84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过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; }
分割成若干个单词,对每个单词用递归
从后往前递归,并在递归的过程中,对空格判断,发现空格就把剩下未递归的内容和前面的内容互换位置。