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;
}
답변
