皮肉強化版
プログラムを書くためにあなたを求めて、英語の単語を考えると、文の順序のすべての単語は、出力を逆転させました。
入力フォーマット:
テスト入力は、テストケースを備え、所定の文字列の長さは、列500,000の合計を超えません。文字列は、いくつかの単語や文字列からなる単語は、英語の文字であるスペースの数、(場合はそうである)、スペースで区切られた単語間の数から構成される。
出力フォーマット:
各ライン毎にテストケース出力、逆後の出力文、単語間の唯一のスペースを確保します。
書き込みのトピックやアイデア:私は2次元配列を書きたかっ始め、結果は半分は出なかったんで、
(少し当惑)だけ戦った他のアイデアは、それが配列へのポインタに置き換えるべきだと思い、その後、取り残された、そして最終的にそれ仕方がない、私はコードのビットを見つけることができ、兄について学びます。
私は、コードを理解することを見てすることを決め、自分のアイデアを考えるに戻って、再び書き込みに自分のアイデアを使用するようにしてください。
コードは以下の通りであります:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[500010];
int len,real,head,count=0;
int i,j,k;
gets(str); //gets只有遇到回车才停止输入;
len=strlen(str); //len用来存储字符串长度;
for(i=len-1;i>=0;i--) //从后往前进行
{
if(str[i]!=' ')
{
real=i; //记录单词最后一个字母的位置
for(j=i-1;j>=0;j--)
{
if(str[j]==' ') //向前遍历,遇到空格停下来
{
break;
}
}
head=j+1; //指向空格的下一个空间,即单词的第一个字母
if(count>0) //如果不是输出第一个单词,即原字符串最后一个单词,要输出一个相隔的空格
{
printf(" ");
}
for(k=head; k<=real; k++)//从该单词的开头字符逐个输出到末尾字符
{
printf("%c", str[k]);
}
count++;
i=j; //从遇到的空格那个位置开始,继续向前查询
}
}
return 0;
}