C语言每日一题-PTA-基础编程题-7-32 说反话-加强版

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

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

输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

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

int main() {

char *s1=(char*)calloc(500001,sizeof(char));//在申请内存空间的时候进行了初始化 
gets(s1);
char *s2=(char*)calloc(500001,sizeof(char));//在申请内存空间的时候进行了初始化 
int length=strlen(s1);//得到s1的字符串的长度
int i=length-1;
int word=0;//计算每个单词的长度
int j=0;
for(;i>=0;i--)//从后遍历原始字符串 :以空格分隔单词 
{
	if(s1[i]==' '||i==0)//到了空格处或者原始字符串的开头,把单词复制给s2 
	{
		if(word!=0)//保证单词间只有1个空格:当原始字符串有两个空格时,不输出空格 
		{
			int m=1;
			if(i==0&&(s1[i]!=' '))//到了开头 :开头可能就是空格 
			m=0;
			for(;m<=word;m++,j++)
			{
				s2[j]=s1[i+m];
			}
            if(i!=0)
			{ 
				int n=i;
				for(n;n>=0;n--)
				{
					if(s1[n]!=' ') //后面还有单词输出空格 
					{
						s2[j]=' ';
						break;
					} 
				 } 	
			}
			j++;
			word=0;
		}
	
	}	
	else		
	{
		word++;
	}
 } 
 puts(s2);
free(s1);
free(s2);
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值