2013-01-25 5 views
0

문자 배열을 소문자 char 배열로 변환해야합니다. 또한 Ä와 같은 특수 문자를 ä로 변환하려고합니다. 그러나 "ASCII 코드"196 ASCII 128 않습니다. 어떻게 소문자로 변환 할 수 있습니까? 문자열 이니셜 라이저로 사용할 수는 있지만 실제로 코드를 처리 할 수는 없습니다. 이 경우 컴파일러 옵션을 리눅스에서 이클립스 CDT c99 모드없이 사용할 수 있습니다 (그 하나를 사용할 수 없습니다). ctype.h에서Ansi C - 문자열을 소문자 문자열로 변환

char* toLowerCase(char* text) 
{ 
    int length = strlen(text); 
    char* result = malloc(length); // malloc adds the 0 automatically at result[length] 
    int i; 
    for (i = 0; i < length; i++) 
     if ((text[i] >= 65) && (text[i] <= 90)) 
      result[i] = text[i] | 32; 
     else 
      result[i] = text[i]; 
    return result; 
} 

toLowerCase("hElLo WoRlD ÄäÖöÜü"); 
// result is "hello world ÄäÖöÜü" 

tolower() 중 하나를하지 않습니다.

+3

가 더이 완전히 됨으로써 불행을 확장 비 고 친절한 asci. 그리고 당신은 단지 14 살 * 표준에 기반을 둔 컴파일러를 사용할 수 없습니까? 나는 너의 교수가 * 진짜 * 인기 있다고 생각한다. – WhozCraig

+1

반송 문자열이 종료되지 않았습니다. – unwind

+4

더 이상 다루기 전에 [모든 소프트웨어 개발자가 절대적으로 최소로 절대적으로, 절대적으로 유니 코드와 문자 집합에 대해 알고 있어야합니다 (변명 없음!)] (http://www.joelonsoftware.com/articles/Unicode.html)를 읽어보십시오. 문자. – pmg

답변

3

나는, 당신이 약 setlocale을 읽을 필요 (or here)

을 생각하고()

참고 항목 tolower 사용을 프로그램 시작, setlocale에 (LC_ALL에 해당하는, "C"중); 모든 사용자 코드가 실행되기 전에 실행됩니다.

(아는 경우 올바른 또는 선택) 당신은 환경의 기본 로케일을 시도 할 수 있습니다 :

이 외에도 완전히 비 휴대용되는
setlocale(LC_ALL, ""); 
관련 문제