2012-04-09 4 views
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; 
} 
+0

私はこの質問に2つの問題があることがわかります。 __1__:本当の質問ではありません。私の人生のために、あなたは何を求めているのか、なぜそれを望んでいるのか理解できません。 __2__:__私のCコードは正しいですか?__先生に相談してください。 –

+2

@Pranav:コードはそれほど長くはなく、明らかに間違っています。それは非常によく言われる質問ではありませんが、それは恐ろしい最初の質問でもありません。 – cha0site

答えて

6

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

さらに、strncmp(3)を使用し、バッファのサイズを指定してください。

最後に、アレイアクセスの場合は*(argv+i)の代わりにargv[i]を使用できます。意味は同じですが、最初のバージョンははるかに読みやすくなっています。

if (0 == strncmp(argv[i], "lower", 6)) { 
    ... 
} 
5

あなたは文字列を比較するstrcmp()機能を使用する必要があります。

2

やっ*(argv+i)=="lower"あなたが実際に、このようなC-文字列へのポインタを比較している:

だから、あなたのような何かをしたいと思います。このような文字列の内容が等しいかどうかを確認するには、strcmpを使用する必要があります。この場合、strcmpはゼロを返します。

1

fgetcは、charではなくintを返します。これを切り捨てると、今度は大丈夫ですが、バイナリデータを扱うときには恐ろしい苦痛を受けます。

+0

あなたは 'getchar(3)'を意味すると思いますか?ここでの問題は、 'getchar(3)'が 'int 'に' unsigned char'キャストを返し、そのコードがそれを行う方法を比較すれば正当な文字 '0xFF'を混乱させるということですと 'EOF'。いいキャッチ! – cha0site

関連する問題