The C Programming Language練習問題1-22
1411 ワード
テーマ:長い入力行を短く2行以上に折り、入力行のn列目の前の最後の非スペースの後に折ります.プログラムが入力行が長く、指定した列の前にスペースやタブがない場合をスマートに処理できることを保証します.
問題解析では,入力された各行の文字列長を判断する必要があり,長さがnを超えると,この行をnを超えない複数の行に分割する.分割点の判断.文字列の長さがnを超える場合、n番目の位置の文字がスペースでなければ、n番目の文字を次の行に、スペースであれば判断を続け、後ろの最初のスペースではない文字を次の行に変更します.
プログラミングの考え方1.まず文字列を2に入力.各行の長さがnより大きいか否かを判断し、n以下であれば直接出力する.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