129

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

4

6 に答える 6

184

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

このような些細なこと:

#include <ctype.h>

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

または、1つのライナーが必要な場合は、JFセバスティアンのこれを使用できます。

for ( ; *p; ++p) *p = tolower(*p);
于 2010-04-18T09:44:18.330 に答える
9

小文字に変換することは、ASCIIに制限する場合、立ち上がりビット0x60と同等です。

for(char *p = pstr; *p; ++p)
    *p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
于 2010-04-18T10:36:15.730 に答える
2

パフォーマンスを向上させるためにポインターをループします。

#include <ctype.h>

char* toLower(char* s) {
  for(char *p=s; *p; p++) *p=tolower(*p);
  return s;
}
char* toUpper(char* s) {
  for(char *p=s; *p; p++) *p=toupper(*p);
  return s;
}
于 2020-04-30T08:01:09.057 に答える
1

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

于 2010-11-19T19:43:53.507 に答える
1

使用するのと同じくらいずさんな場合はtolower()、次のようにします。

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

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

于 2013-05-22T05:14:23.873 に答える
0

ASCII文字列を扱っているだけで、ロケールの問題はありませんか?そうです、それはそれを行うための良い方法でしょう。

于 2010-04-18T09:43:26.650 に答える