字符串逆序输出
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
0
-
描述
-
给定一行字符,逆序输出此行(空格.数字不输出)
-
输入
-
第一行是一个整数N(N<10)表示测试数据的组数)
每组测试数据占一行,每行数据中间有且只有一个空格(这样你可以把此行当成两个字符串读取)。
每行字符长度不超过40
并且保证输入的字符只有空格(1个),数字,小写字母三种
输出
- 对应每行测试数据,逆序输出(空格和数字不输出) 样例输入
-
3 abc 123de abc 123 abc d
样例输出
-
edcba cba dcba
来源
- [521521]原创 上传者
我的程序:
#include<stdio.h> #include<string.h> int main(){ int i,n, k; char a[40]; //字符长度不超过40 scanf("%d",&n); getchar(); //吃掉空格 while(n--){ //测试数据组数 gets(a); //输入字符串 k = strlen(a); //获得字符串长度 for(i = k - 1; i >= 0; i--) if(a[i]>='a'&&a[i]<='z') //输出小写字母 printf("%c",a[i]); printf("\n"); } return 0; }
最优程序:
01.
#include <stdio.h>
02.
void
revers()
03.
{
04.
char
c;
05.
if
((c =
getchar
()) !=
'\n'
)
06.
revers();
07.
if
(c !=
'\n'
&&c>=
'a'
&&c<=
'z'
)
08.
putchar
(c);
09.
}
10.
11.
int
main()
12.
{
13.
int
a;
14.
scanf
(
"%d\n"
,&a);
15.
while
(a--)
16.
{
17.
revers();
18.
printf
(
"\n"
);
19.
}
20.
return
0;
21.
}
1.从缓冲区读走一个字符,相当于清除缓冲区
2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),
所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而
是会直接取走这个“无用的”
回车符,从而导致读取有误
3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
getchar()使用不方便,解决方法:
(1)使用下面的语句清除回车:
while(getchar()!='\n');
(2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要
包含头文件<conio.h>
-
第一行是一个整数N(N<10)表示测试数据的组数)