描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。所谓单词指的是所有不包含空格的连续的字符。
这道题请用cin.getline输入一行后再逐个单词递归处理。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world.
样例输出
olleh .dlrow
这道题怎么通过递归实现?不用递归我可以做出来,我用递归出来是这个样子的
.dlrow olleh
怪我咯2017-04-17 13:25:48
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;
}
PHP中文网2017-04-17 13:25:48
#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;
}