0

このコードの平和に問題があります。小文字を大文字に変更し、複数のスペースを 1 つのスペースに変換する必要があります。それで、それが間違っているのは、「abcdefg」と書いたときのように、最初の文字を何らかの形で切り取って、出力「BCDEFG」に表示することです。

main(){ 
int z=0,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
4

4 に答える 4

0

空きスペースの処理にはいくつかの問題があります。

いずれにせよ(getcharが0x20を返す場合)スペースを出力するようです。

于 2012-03-14T10:52:45.850 に答える
0

それは私のためにすべての文字を生成しているようです...入力した文字で各ステップで何をしているのかを調べるために、それをトレースしてみましたか?

于 2012-03-14T10:44:18.507 に答える
0

スペースの問題を解消するために、これから始めることができます。それ以外の場合は、特定の問題のある入力がありますか。「最初の文字のカット」の問題がないからです。

main(){ 
int z=1,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
                z=1;
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
于 2012-03-14T11:45:12.093 に答える
0

まず、「32」のような定数を使用してはならず、代わりにシステムに値を定義させてください。IE: b -= char(' ');

次に、関数 "islower()" と "toupper()" を見ると、C が自動的にそれを行います。

次のようなことを考えてみましょう:

含む

主要 () {

    int     flag = 0;
    char    b;

    while ((b=getchar()) != '\n') {
            if (flag && isspace(b))
                    continue;
            putchar(toupper(b));
            if (isspace(b)) {
                    flag = 1;
                    continue;
            }
            flag = 0;
    }
    putchar('\n');

}

入力: "a bc def ghijghg 123 a1b2c3"

出力: "A BC DEF GHIJGHG 123 A1B2C3"

注: 入力行に多くの空白が含まれているため、テキスト ボックスが空白を削除しているように見えます。

境界条件を常に意識する必要があります。入力が多数のスペースで始まる場合でも、1 つのスペースが出力されます。先頭のスペースをすべて削除するには、flag = 1 を初期化します。入力の末尾にスペースがある場合は、最後のスペースも出力します。それらを排除するには、スペースと別の印刷可能な文字が表示された後にスペースを印刷するという、わずかに異なるソリューションが必要になります。

于 2012-03-14T16:11:07.857 に答える