[c] C에서 문자열을 어떻게 소문자로 지정합니까?

C에서 대소 문자 혼합 문자열을 소문자 문자열로 어떻게 변환 할 수 있습니까?



답변

그것은 표준 라이브러리에 있으며, 이러한 기능을 구현하는 가장 직접적인 방법입니다. 예, 문자열을 반복하고 각 문자를 소문자로 변환하십시오.

다음과 같은 사소한 것 :

#include <ctype.h>

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

또는 하나의 라이너를 선호하는 경우 JF Sebastian에서 다음을 사용할 수 있습니다.

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


답변

소문자로 변환하는 것은 ASCII로 제한하는 경우 상승 비트 0x60과 같습니다.

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


답변

ASCII 문자열 만 다루고 있으며 로케일 문제가 없습니까? 그렇다면 네, 그렇게하는 것이 좋은 방법이 될 것입니다.


답변

소문자 함수에서 유니 코드 지원이 필요한 경우 다음 질문을 참조하십시오.
Light C 유니 코드 라이브러리


답변

를 사용하는 것처럼 엉성한 경우 다음과 같이 tolower()하십시오.

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

그러나 음, 기호 / 숫자를 입력하면 폭발이 일어나고 일반적으로 악합니다. 그래도 좋은 인터뷰 질문입니다.


답변

더 나은 성능을 얻기 위해 포인터 반복 :

#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;
}


답변