0

私は、次のように呼び出されたときに文字を小文字に変換するCプログラム用にこのコードを書いていました。

./arg lower

次のように呼び出されると、大文字に変換されます。

./arg upper

これが私が書いたコードです、親切に私を助けてください:

#include<stdio.h>
#include<ctype.h>
main(int argc,char *argv[])
{
    int i;
    char c;
    for(i=1;i<argc;++i)
    {

        if(*(argv+i)=="lower")
        {
             while((c=getchar())!=EOF)
                 {
                      c=tolower(c);
                      putchar(c);
                 }
        }
        if(*(argv+i)=="upper")
        {
            while((c=getchar())!=EOF)
                 {
                      c=toupper(c);
                      putchar(c);
                 }                    
        }
    }
    return 0;
}
4

4 に答える 4

6

C ではそのような文字列比較を行うことはできません。使用する必要がありますstrcmp(3)

strncmp(3)さらに良いことに、バッファのサイズを使用して指定します。

最後に、配列アクセスの場合、argv[i]代わりに*(argv+i). 意味は同じですが、最初のバージョンの方がはるかに読みやすいです。

したがって、次のようなものが必要です。

if (0 == strncmp(argv[i], "lower", 6)) {
    ...
}
于 2012-04-09T17:44:13.557 に答える
5

strcmp()文字列を比較するには、関数を使用する必要があります。

于 2012-04-09T17:44:02.893 に答える
2

実行するとき*(argv+i)=="lower"、実際にはポインターをそのような c-strings と比較しています。strcmpそのような文字列の内容が等しいかどうかを確認するために使用する必要があります。等しい場合strcmp はゼロを返します。

于 2012-04-09T17:45:13.053 に答える
1

fgetcchar ではなく int を返します。今回はそれを切り捨てても問題ありませんが、バイナリ データを扱うときはひどい苦痛に苦しむことになります。

于 2012-04-09T18:05:20.363 に答える