web-dev-qa-db-ja.com

Cで文字列を小文字にするにはどうすればよいですか?

Cで大文字と小文字が混在する文字列を小文字の文字列に変換するにはどうすればよいですか?

91
Tony Stark

それは標準ライブラリにあり、それはそのような関数を実装するために私が見ることができる最も簡単な方法です。はい、文字列をループして、各文字を小文字に変換するだけです。

このような些細なもの:

#include <ctype.h>

for(int i = 0; str[i]; i++){
  str[i] = tolower(str[i]);
}

または、1つのライナーが必要な場合は、J.F。Sebastianのこのライナーを使用できます。

for ( ; *p; ++p) *p = tolower(*p);
135
Earlz

小文字に変換することは、ビット0x60の上昇と同等です。

for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p;

(もちろんラテンコードページ用)

6
Oleg Razgulyaev

小文字の関数でUnicodeサポートが必要な場合は、次の質問を参照してください。 Light C Unicode Library

1
Eduardo

tolower()を使用するのと同じくらいだらしないようにするには、次のようにします。

char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}

しかし、まあ、あなたがそれにいくつかの記号/数字を与えると、それはちょっと爆発します、そして一般的にそれは悪です。しかし、良いインタビューの質問。

1
Ken S

ASCII文字列を処理しているだけで、ロケールの問題はありませんか?それから、はい、それはそれをする良い方法です。

1
Mark Byers