Bailian4104 单词翻转

输入一个句子(一行),将句子中的每一个单词翻转后输出。

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,我感觉对我这种小白来说,这种题还是值得推敲的

猜你喜欢

转载自blog.csdn.net/weixin_42324904/article/details/81175541