7-13|7-13 说反话-加强版 (12分)(附详细教程)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
分析:
完成此题我们需要两个步骤:1,先把原话的每个单词自我翻转(即变成olleH dlroW ereH I emoC)2,在整体翻转(即变成Come I Here World Hello)。
【7-13|7-13 说反话-加强版 (12分)(附详细教程)】代码展示如下:
#include
#includevoid reverseWords(char * s){
int count=0;
char temp=0;
int i=0,j=0,k=0;
int leap=0;
while(s[i]!=0)
{
for(;
;
++i)
{
if(s[i]==32||s[i]==0)
break;
}
count=i-k;
leap=count-1;
for(j=k;
j<(k+count/2);
++j)
{
temp=s[j+leap];
s[j+leap]=s[j];
s[j]=temp;
leap=leap-2;
}
for(;
;
++i)
{
if(s[i]!=32)
break;
}
k=i;
}
return s;
}void reverseString(char* s){
int i=0;
int len=strlen(s);
char temp=0;
for(i=0;
i<(len/2);
++i)
{
temp=s[len-1-i];
s[len-1-i]=s[i];
s[i]=temp;
}
}int main(void)
{
char s[500003]={0};
int i=0;
int count=0;
int character=0;
int len=0;
gets(s);
reverseWords(s);
reverseString(s);
len=strlen(s);
for(i=len-1;
;
--i)
{
if(s[i]!=32)
break;
if(s[i]==32)
s[i]=0;
}
for(i=0;
s[i]!=0;
++i)
{
if(s[i]==32&&character==0)
continue;
if(s[i]==32&&count==0)
{
printf("%c",s[i]);
++count;
continue;
}
if(s[i]!=32)
{
printf("%c",s[i]);
count=0;
++character;
}
}
return 0;
}
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 尽力
- 一个人的碎碎念
- 时间老了
- 午门传说
- 我们重新了解付费。
- 说的真好
- “不完美,才美”01(190410)
- 父母越不讲道理,孩子反而越优秀!说的是你吗()
- 我和你之前距离