输入一个句子(一行),将句子中的每一个单词翻转后输出。
Input
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
Output
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
Sample Input
hello world
Sample Output
olleh dlrow
这个题目对我这种小白来说还是觉得很值得推敲的,先看下我没有ac的错误代码,
#include<stdio.h>
#include<string.h>
#define N 501
int main()
{
char a[N];
char b[N];
gets(a);
char *buf;
char *delim=" ";
int j=0;
buf=strtok(a,delim);
while(buf){
if(j++!=0) printf(" ");
strcpy(b,buf);
int len=strlen(b);
int i;
for(i=len-1;i>=0;i--)
printf("%c",b[i]);
buf=strtok(NULL,delim);
}
}
我正在为使用了strtok函数感到沾沾自喜,输出貌似没有问题,,,,但是就是通不过???为啥呀???
总显示输出错误,但是空格好像也没有多输呀,也没有换行呀,但是,忽略了一点,假如读取的时候字符中间不止一个空格呢?
扫描二维码关注公众号,回复:
2397292 查看本文章
输出就不对了,所以,我不得不换一种思路。
我和同学想了很久, 觉得很值得推敲。
#include<stdio.h>
#define N 500
char pack[N];
int pstack;
int main()
{
char c;int flag=0;
while(1){
c=getchar();
if(c==' '||c=='\n'||c==EOF){
/*好的,如果碰到空格了,那就把下面储存的字符数组倒序输出,flag在此过程中清零*/
while(flag){
putchar(pack[--flag]);
}
/*如果是空格,有多少个我输多少个,一个不多一个不少*/
if(c!=EOF) putchar(c);
}
/*如果输出的是普通的字符,那就把c保存到一个数组里,用pack储存,*/
else
pack[flag++]=c;
/*输出空格或者文件结束时跳出循环*/
if(c=='\n'||c==EOF)
break;
}
}
OK。AC,我感觉对我这种小白来说,这种题还是值得推敲的