7-32说反话-加强版(20)

            7-32 说反话-加强版 (20 分)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:Hello World Here I Come
结尾无空行
输出样例:Come I Here World Hello
结尾无空行
知识点:gets函数、字符数组、for循环嵌套

C代码#include<stdio.h>#include<string.h>int main() { char c[500001]="\0"; gets©; int len=strlen©;//输入字符串长度 char a[500001]="\0"; int i,count=0,m=0,k,flag=0; for(i=len-1; i>=0; i–) { if(c[i]!=’ ‘) count++;//统计单词的字符个数 else { if(flag0||c[i-1]’ ‘) {//存第一个单词,遇见多个空格时,判断空格的下一个是否还是空格 for(k=i+1; k<=i+count; k++)//是的话就存第一个空格到i+count的字符进a数组 a[m++]=c[k]; count=0;//方便下一个统计 flag=1; } if(flag1&&c[i-1]!=’ ‘) {//存第二个单词,排除连续空格情况 for(k=i+1; k<=i+count; k++) a[m++]=c[k]; a[m++]=’ ‘;//存入一个空格(输出要求) count=0; } } } if(count!=0) {//判断输入的第一个单词 for(k=i+1; k<=i+count; k++) a[m++]=c[k]; } int n,x; for(x=0;x<m-1;x++){//解决刚开始就输入空格,那么输出就不需要输出空字符啦 if(a[x]!=’ ') break; } for(n=x; n<m-1; n++) printf("%c",a[n]); if(a[n]’ '); else printf("%c",a[n]); printf("\n"); return 0;}

知识点:getline输入、while循环嵌套
C++代码
#include<bits/stdc++.h>using namespace std;int main(){ string s; getline(cin,s); int i=0,flag=0; //统计长度 while (s[i+1]!=’\0’) i++; //循环遍历 while (i>=0) { int a=0, b=0;//a,b可以看作俩指针,控制单词的起始和结束,先找b结束字符 while (s[i] == ’ '&&i>=0) i–; b = i; while (s[i] != ’ '&&i>=0) i–; a = i+1; if (flag > 0&&(a>0||b>0)) cout<<(" “); //输出[a,b]的一个单词 for (int j=a; j <= b; j++) cout<< (”%c", s[j]); ++flag; } return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值