“编写程序,将句中所有单词的顺序颠倒输出。” 这个是否可以递归实现?

qwerab 2015-01-08 12:01:42
引用
10-0. 说反话 (20)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello


这个题目一般的方法很容易,但我想能否用递归实现?可惜自己才学了一个多月,能力实在太差,没法实现自己的想法。
我尝试了
void reverse () {
char s[50];
scanf("%s", &s);
reverse();
printf("%s", s);
}


感觉思路还可以,但是无论怎么修改也达不到效果,请问这个可以按我的想法实现么?
...全文
3694 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zeno's cat 2016-09-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char inStr[80+1];
char outStrs[40+1][80+1];
int main()
{	gets(inStr);
	int len = strlen(inStr);
	int wordNum = 0;
	int i, j = 0;
	for (i = 0; i < len; i++)
	{
		if (inStr[i] == ' ')//按空格划分单词 
		{
			j = 0;
			wordNum++;
			continue;
		}
		outStrs[wordNum][j] = inStr[i];
		j++; 
	}
	for (i = wordNum; i > 0 ; i--)
	{
		printf("%s ", outStrs[i]);
	}
	printf("%s\n", outStrs[0]);

	return 0;
}
lm_whales 2015-01-09
  • 打赏
  • 举报
回复
可以递归,不过这种递归走了极端,是一种递归的误用
707wk 2015-01-08
  • 打赏
  • 举报
回复
#include <stdio.h>

void funiction()
{
	char ch=getchar();
	if(ch!='\n')funiction();
	printf("%c",ch);
}

int main ()
{
	funiction();
	return 0;
}
赵4老师 2015-01-08
  • 打赏
  • 举报
回复
如果一句中有2000000个单词的话…… “给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
allenltiverson 2015-01-08
  • 打赏
  • 举报
回复
楼上各种淫才。。。
xionggch 2015-01-08
  • 打赏
  • 举报
回复

void reverse( char* InP, char* OutP )
{
	if( InP==NULL || OutP==NULL ) return;
	char *p;
	p = strstr( InP, " " );
	if( p==NULL )
	{
		strcat( OutP, InP );
		return;
	}
	
	reverse( p+1, OutP );
	strncat( OutP, InP, p-InP );
}
void main()
{
	char a[100]="afda affsdfa adfafaf";
	char b[100];
	reverse( a, b );
}
野男孩 2015-01-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

void reverse (char* buf) {
    char* p = strchr(buf, ' ');
	if (p)
	{
		*p = 0;
		reverse(p+1);
	}
    printf("%s ", buf);
}

int main(){

	char buf[1000];
	//scanf("%s", buf);	//用字符串直接模拟吧,就不输入了
    strcpy(buf,"a b c d e f g h i j k l m n");//多个词的用例
	reverse(buf);
	printf("\r\n");

	strcpy(buf,"a");	//单个词的用例
	reverse(buf);
	printf("\r\n");

	return 0;
} 
output: n m l k j i h g f e d c b a a Press any key to continue
Const_User 2015-01-08
  • 打赏
  • 举报
回复

void reverse(存放数据的数组地址,单词的个数,数组的下标)//小标从0开始
{
if(单词的个数>1)
reverse(数组地址,单词个数自减1,数组下标自加1);
printf(数组地址[数组下标]);
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧