2012-04-04 24 views
-1

"Hello""hello"になるように、文字列の大文字と小文字を変換できる必要があります。最終的に、私はそれらを比較する必要があります。大文字を含む文字列を小文字に変換する

はどのようにして変換します:文字列"hello"

char *string = "HEllO"; 

+0

あなたはどのようなロケールですか? –

+0

あなたは正確に何を比較するのですか?入力文字列に大文字が含まれているかどうかだけを知る必要はありますか? – kay

+0

最終的に 'compareToIgnoreCase'メソッドを作成したいのですか?文字列を比較するときに文字を小文字に変換し、文字列全体を保存しないようにすると、これを行うことができます。 – twain249

答えて

3

まず、あなたの文字列が正しく宣言されていない、それは次のようになります。

char *string = "Hello"; 

は、小文字に変換するには、この方法を試してください。

char *lowercase(const char *str) 
{ 
    int length = strlen(str); 
    char *dup = malloc(length + 1); 
    strcpy(dup, str); 

    for (int i = 0; i < length; i++) 
    { 
     dup[i] = tolower(dup[i]); 
    } 

    return dup; // remember to free when done! 
} 
+2

文字列の定義が間違っていますか? '' HEllO''は有効な文字列です。 – twain249

+0

リチャードはあなたの質問の[改訂3](http://stackoverflow.com/revisions/1143ed2a-0333-4495-b243-3d81f560f3c8/view-source)を意味すると思います。 – kay

2

は、単にこのインラインを行います。

char string[] = "Hello"; 
    char * ptr; 

    for (ptr = string; *ptr != '\0'; ++ptr) 
    { 
     *ptr = tolower(*ptr); 
    } 
+0

文字列リテラルはconstです。実行時にコードでsegフォルトが発生します。 'char string [] = ...'が動作します。 – kay

+0

(編集:kayが私の前にいる)少なくともこれがなぜ機能しないのかを彼に説明してください。 – James

+0

訂正されました。動作は "未定義"です。 – junglecat

関連する問題