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; }
分割成若干个单词,对每个单词用递归
从后往前递归,并在递归的过程中,对空格判断,发现空格就把剩下未递归的内容和前面的内容互换位置。