用C语言写 字符串逆序输出

描述给定一行字符,逆序输出此行(空格.数字不输出)输入第一行是一个整数N(N<10)表示测试数据的组数)每组测试数据占一行,每行数据中间有且只有一个空格(这样你可以把此行... 描述 给定一行字符,逆序输出此行(空格.数字不输出)输入第一行是一个整数N(N<10)表示测试数据的组数)
每组测试数据占一行,每行数据中间有且只有一个空格(这样你可以把此行当成两个字符串读取)。
每行字符长度不超过40
并且保证输入的字符只有空格(1个),数字,小写字母三种输出对应每行测试数据,逆序输出(空格和数字不输出)样例输入3
abc 123de
abc 123
abc d样例输出edcba
cba
dcba
展开
 我来答
金鱼8884
推荐于2017-09-21 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14951
学生

向TA提问 私信TA
展开全部
逆序输出有很多种,具体的实现方法取决于你题目的要求

1. 如果只是要求逆序输出,那么可以采用类似的方法:
void reverse(char *s)
{
if(*s=='\0')
return;
reverse(s+1);
printf("%c",*s);
}
这种方法在s很长的情况下会一直递归到底,不是很好。

2. 如果需要将字符串整个逆序在函数外面输出,那么可能希望采用返回字符串指针的方式;实现如下:
char * reverse( char* s )
{
static char *p = s+strlen(s)-1; //p是一个静态变量,指向当前递归层处理的字符串尾,而s指向字符串头
if(s < p)
{
  char c = *p; //交换头尾字符
  *p = *s; 
 *s = c;
p--; //尾向前挪一个
reverse(s+1); //相当于头向后挪一个
}
return s;
}

3.1 当然,有的时候,并不需要reverse函数本身递归,而是可以借助一些辅助的递归函数,比如说:
void reversehelp(char * head, char * end)
{
if (head < end)
{
char c = *head;
*head = *end;
*end = c;
reversehelp(++head, --end);
}
}
然后在调用时像这样调用:
char * reverse(char * s)
{
char * end = s + strlen(s) - 1;

reversehelp(s, end);
return s;
}

3.2 类似的辅助函数还可以采用一个字符串指针和一个长度参数的方式,如下例:
void reversehelp( char* s, int n )
{
if ( n > 1 )
{
char c = s[n-1];
s[n-1] = s[0];
s[0] = c;
reversehelp( s+1, n-2 );
}
}
然后在调用时如下:
char *reverse(char *s)
{
reversehelp( s, strlen(s) );
return s;
}
看老鼠在天上飞cu93d
2012-09-13 · TA获得超过252个赞
知道小有建树答主
回答量:604
采纳率:50%
帮助的人:361万
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
int N,i,k;
char str[40],ch;
scanf("%d",&N);
ch=getchar();
while(N--)
{
gets(str);
k=strlen(str);
for(i=k-1;i>=0;i--)
if(str[i]>='a'&&str[i]<='z')
printf("%c",str[i]);
printf("\n");
}
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式