#include <stdio.h> //标准c,没有用c++的string,这样首先读取字符串就是个问题了
#define MAX 500000
//先处理字符串,删除多余的空格,形成新字符串
//Hello World Here I Come
int main()
{char s; //指单独一个字符char t[MAX]; //创建一个字符数组int i = 0, count = 0, flag = 0;while ((s = getchar()) != '\n'){ //getchar每次从标准输入读入一个字符 ,标准输入会有'\n'???if (s != ' '){flag = 1; //标记遇到单词t[i++] = s;count = 0;}else if (count > 0){continue; //contiue跳过}else if (flag){t[i++] = s; //只有之前遇到单词的情况下碰到空格才把这个空格写入目标字符串count++; //这里换成count=1也是完全一样}} //删除多余的空格,将目标字符串放入 t 中//这里的count起了什么作用呢?//如遇到 Hello,都存入t中,遇到第一个空格,此时count=0,flag=1,把空格存入t,count=1//World后面的空格 ,第二个空格,遇到空格继续读下一个字符即,continue,起一个跳过作用//开头就是空格咋办?啥也不操作count = 0;int j;for (i -= 1; i >= 0; i--){ //i-=1.i=i-1,最后一个标号为i里面是没存东西的if (t[i] != ' '){count++; // 这里的 count 统计的是一个单词里字母的个数}else if (t[i] == ' ' && count > 0){for (j = i + 1; j <= i + count; j++){printf("%c", t[j]);} //遇到空格就输出单词printf(" ");count = 0;}} // 还剩最后一个单词没输出,因为最后一个单词可能前方无空格 ,只完成了count++,但是没有遇到 空格,那么逻辑是一样的for (j = i + 1; j <= i + count; j++){printf("%c", t[j]);} //i,j的变量作用范围非常的有用//这么看来字符数组其实非常的方便,不必非要使用c++的string类 ,continue用来跳过也是极好的return 0;
}