7-32 说反话-加强版
题目问题描述:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
思路分析:
问题:
- 关键点:利用计数器,来判断输出是否时单词;
- 逆序输出,遇空格,且输出单词后,将该位置置为空,计数器重制;不为空且有字符串时计数器++;
- 需要排除一个单词首位有空格的情况;输出正确的空格形式;
实现代码:
#include<stdio.h>
#include<string.h>
int main(){
char a[500001];
int count = 0; //计数器
long i = 0;
long len; //字符串长度
gets(a); //获取字符串
len = strlen(a);
for(i = len; i >= 0;i--){ //逆序输出
if(a[i] == ' '&& count>0){
printf("%s",&a[i+1]);//此处采用&取地址,逆序输出,
//当i指向' '时,则输出' '后的地址所存放的字符串
if(a[0] != ' '){//排除首位字符是空格的情况
printf(" ");
}
a[i] = '\0';//将i所指的空格为置为空,之后按地址输出时,则不会显示空格;
count = 0; //计数器重制;
}
else if(a[i] == ' '){//只有空格,即连续空格的情况
a[i] = '\0';
}
else if(a[i] != ' '&&a[i] != '\0'){//当i所指向的为字符时计数器++
count++;
}
}
printf("%s",&a[0]);//取字符型数组的首地址输出最开始的字符;
}