2020oop第一次7-1 说反话-加强版 (20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
最初代码(AC)
#include <stdio.h>
#include<string.h>
int main()
{
char a[500001];
gets(a);
int i,l,j,word=0,flag=1;//flag是记录空格的,word是统计单词长度的
l=strlen(a);//测量长度
for(i=l-1;i>=0;i--)//倒序检查
{ if(a[i]!=' ') word++;//开始统计单词长度
else if(word!=0&&a[i]==' ')//遇到第一个空格单词结束
{if(flag==1) flag=0;// 遇到多个空格的处理方法
else printf(" ");
for(j=i+1;j<=i+word;j++)
printf("%c",a[j]);//开始一个一个输出单词
word=0;
}
}if(word>0)//输出最后一个单词,主要是控制输出格式用的
{
if(flag==0) printf(" ");
for(j=0;j<=word-1;j++)
printf("%c",a[j]);
}
return 0;
}
后来的代码
#include<iostream>
#include<string.h>
using namespace std;
char a[500000];
int main(){
gets(a);//string 输入时遇到空格、换行等空白输入就会停止,所以采用gets函数,但是在PTA上会有Warming提示
int la=strlen(a),k=0;//k用来记录一个单词的长度 ,记得初始化
for(int i=la-1;i>=0;i--)//说反话,那就反过来
{
if(a[i]!=' ')//不是空格时+1
k++;
else {
if(a[i]==' '&&k!=0){//k!=0是用来筛除多个空格的情况
for(int j=0;j<=k;j++)
cout<<a[i+1+j];
k=0;
}
}
}
if(k>0){//别漏了第一单词前并没有空格的情况
for(int i=0;i<k;i++)
cout<<a[i]<<"*";
}
return 0;
}
上一篇: python源码|dingniu
下一篇: mysql复制表数据