给定一句英语,要求你编写程序,将句中全部单词的顺序颠倒输出。 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
char op[500001];//定义最大状况 int i,j,len; int count=0;//定义计算每一个单词的长度 int flag=1;//控制空格输出 gets(op);//获得字符串 len=strlen(op);//得字符串的长度 for i=len-1 to 0 //遍历字符串 if op[i]!=' ' then count++ end if //计算每一个单词的长度 if op[i]>='A'&&op[i]<='Z' then //控制空格输出 if flag==1 then flag=0; end if else 输出空格 for j=i to i+count 输出单词 end for count=0//从新计算下一个单词的长度 end if //对最大的状况进行输出 if count>0 then 输出空格 for i=0 to count 输出单词 end for end if
Q1:第一次提交格式出错,有看了看题目,才发现结尾不能够有空格。
A1:后来定义flag来控制空格的输出,第一个单词前不输出空格,后面的单词前都须要输出空格。
Q2:没有考虑到最后一个测试点,就是最大的时候可能没有开头的大写字母就结束了,这样没遇到大写字母就无法输出。
A2:后来继续去考虑count是否大于0,若是大于0就说明还有单词没有输出,再把最后那个输出便可。算法
begin://以防输入非法字符,能够从新输入 int i=0,j,answer; double totalTime;//计算每题的答题时间 char op[4]={'+','-','*','/'};定义字符串来随机生成符号 if level=1 then 生成一步一位数加减乘除计算式,并储存 end if else if level==2 orlevel==3 then 生成两步2/3位加减计算式,并储存 end if if strlen(exp)==3 then//判断是否能够整除,不能够则从新生成表达式 if !IsExp(exp) then goto begin end if end if
int flag=1//控制输出 if 运算符是除号时 then if 结果不能被整除时 flag=0; end if end if if 运算符是减号时 then if 前一个数大于后面一个数时 flag=0; end if end if return flag;
int m,sum=0,i,answer; char oldc='+'; if strlen(exp)==3 then//若是是第一级别的状况 if 中间的符号是+ then answer=前面的数+后面的数 end if if 中间的符号是- then answer=前面的数-后面的数 end if if 中间的符号是* then answer=前面的数*后面的数 end if if 中间的符号是/ then answer=前面的数/后面的数 end if end if else//若是是第二,三级别的状况 for i=0 to strlen(exp) if 字符在0到9之间 then m=10*m+(*(exp+i)-'0');//求每一个数的数值 end if else //字符不在0到9之间 if oldc=='+' then sum=sum+m; end if else sum=sum-m; end else m=0; oldc=*(exp+i) end else end for answer=sum; end else return answer;