The C Programming Language練習問題1-22


テーマ:長い入力行を短く2行以上に折り、入力行のn列目の前の最後の非スペースの後に折ります.プログラムが入力行が長く、指定した列の前にスペースやタブがない場合をスマートに処理できることを保証します.
問題解析では,入力された各行の文字列長を判断する必要があり,長さがnを超えると,この行をnを超えない複数の行に分割する.分割点の判断.文字列の長さがnを超える場合、n番目の位置の文字がスペースでなければ、n番目の文字を次の行に、スペースであれば判断を続け、後ろの最初のスペースではない文字を次の行に変更します.
プログラミングの考え方1.まず文字列を2に入力.各行の長さがnより大きいか否かを判断し、n以下であれば直接出力する.nより大きい場合は、数行に分割する必要があると判断します.そして出力します.
コード実装
int main()
{
int i, rowlength, rownum;
char line[MAXCHAR];
char c;

i = 0;
rowlength = 0;
rownum = 0;
for (i = 0; (((c = getchar()) != EOF) && i < MAXCHAR); i++)
    line[i] = c;

i = 0;
while ( (c = line[i]) != '
' && i < 1000) { ++rowlength; if (rowlength < MAXLENGTH) { putchar(c); } else if (rowlength >= MAXLENGTH && c != ' ') { putchar('
'); putchar('-'); putchar(c); rowlength = 0; } else if (rowlength >= MAXLENGTH && c == ' ') { putchar('
'); rowlength = 0; } i++; } return 0;

}
実行結果
  :abcdefghijk  lmnopqrst   uvwxyza    bcdefghijklm   nopqrstuvw   xyzabcd   efghijklmnopqrs    tuvwxyzabcdef   ghijklmnopq    rstuvwxyz
  :abcdefghijk  lmnopqrst   uvwx
-yza    bcdefghijklm   nopqrstu
-vw   xyzabcd   efghijklmnopqrs
   tuvwxyzabcdef   ghijklmnop
-q    rstuvwxyz