The C Programming Language練習問題1-21
1944 ワード
練習1-21
プログラムentabを作成し、スペース列を最小数のタブとスペースに置き換えますが、単語間の間隔を維持します.タブ終了ビットの位置は,練習1−20のdetabプログラムの場合と同じであると仮定する.1つのタブまたはスペースを使用して次のタブ終了ビットに到達する場合、どの置換文字を選択すればよいですか?
タイトル分析この練習問題では、文字列のスペースキーを最小のタブとスペースの組み合わせに置き換える必要があります.Windowsのデフォルトタブは8文字のスペースを占めています.たとえば、15文字のスペースがある場合は、2つのタブと1つのスペースで置き換えます.
プログラミングの考え方1.入力文字がスペースかどうかを一字ずつ判断し、そうでなければ直接出力します.2.スペースが表示されたら、スペースカウントに1を追加し、読み取りを返します.スペースでない場合は、スペース数が0より大きいかどうかを判断し、いくつかのタブといくつかのスペースを計算して出力し、出力が完了したら、スペースカウントをゼロにし、最近読んだこの非スペース文字を出力します.スペースでない場合は、改行するかどうかを判断し、改行する場合はスペースの数をゼロにします.いずれもそうでない場合は、文字を直接出力します.3.判断を続ける.
プログラム実装部
}
実行結果
おかしいですね.コードの「t」をアルファベットt、「」を*に置き換えます.タブとスペースの数の計算は間違いありませんが、出力が間違っていて、問題がどこにあるのか、模索中です.の
プログラムentabを作成し、スペース列を最小数のタブとスペースに置き換えますが、単語間の間隔を維持します.タブ終了ビットの位置は,練習1−20のdetabプログラムの場合と同じであると仮定する.1つのタブまたはスペースを使用して次のタブ終了ビットに到達する場合、どの置換文字を選択すればよいですか?
タイトル分析この練習問題では、文字列のスペースキーを最小のタブとスペースの組み合わせに置き換える必要があります.Windowsのデフォルトタブは8文字のスペースを占めています.たとえば、15文字のスペースがある場合は、2つのタブと1つのスペースで置き換えます.
プログラミングの考え方1.入力文字がスペースかどうかを一字ずつ判断し、そうでなければ直接出力します.2.スペースが表示されたら、スペースカウントに1を追加し、読み取りを返します.スペースでない場合は、スペース数が0より大きいかどうかを判断し、いくつかのタブといくつかのスペースを計算して出力し、出力が完了したら、スペースカウントをゼロにし、最近読んだこの非スペース文字を出力します.スペースでない場合は、改行するかどうかを判断し、改行する場合はスペースの数をゼロにします.いずれもそうでない場合は、文字を直接出力します.3.判断を続ける.
プログラム実装部
int main()
{
int spacenum; /* */
int tabnumfinal; /* */
int spacenumfinal; /* */
char c;
spacenum = tabnumfinal = spacenumfinal = 0;
while ((c = getchar()) != EOF)
{
/* , spacenum 1 */
if ( c == ' ') spacenum++;
/* , spacenum 0,
, */
else if ( spacenum > 0 )
{
tabnumfinal = ( spacenum / DEFAULTTABNUM );
spacenumfinal = ( spacenum % DEFAULTTABNUM );
while (tabnumfinal > 0)
{
putchar('\t');
tabnumfinal--;
}
while (spacenumfinal > 0)
{
putchar(' ');
spacenumfinal--;
}
spacenum = 0;
putchar(c);
}
/* spacenum */
else if ( c == '
') spacenum = 0;
/* , =0, , */
else putchar(c);
}
return 0;
}
実行結果
:aaaa bcd efgh abcdef ghijklmn
:aaaa bcd efgh abcdef ghijklmn
おかしいですね.コードの「t」をアルファベットt、「」を*に置き換えます.タブとスペースの数の計算は間違いありませんが、出力が間違っていて、問題がどこにあるのか、模索中です.の
:aaaa bcd efgh abcdef ghijklmn
:aaaa****bcdtefght*abcdeftt*ghijklmn