2012-03-14 3 views
4

문자를 사용하여 큰 배열을 만들지 않고도 문자열에서 악센트를 제거하는보다 효율적인 방법이 있습니까? 예를 들어C에서 문자열에서 액센트를 제거

:

removeaccents("áèfoo") 

출력 : 아스키가 테이블에없는 악센트에

aefoo 

, 나는이 작업을 수행하는 방법을 모르겠어요. 미리 감사드립니다. :)

+0

번역 테이블 대신 항상 사다리를 사용할 수 있습니다. –

+9

문자열을 인코딩하는 데 어떤 인코딩이 사용됩니까? – loganfsmyth

+1

가능한 도움말 질문 : http://stackoverflow.com/questions/144761/how-to-remove-accents-and-tilde-in-ac-stdstring – chikuba

답변

7

unac()과 같은 소리가납니다. 남자 페이지에서 :

unac is a C library that removes accents from characters, regardless of the character set (ISO-8859-15, ISO-CELTIC, KOI8-RU...) as long as iconv(3) is able to convert it into UTF-16 (Unicode).

나는 다운로드 페이지 (나는 here 될 운명 생각하지만, 링크가 현재 404ing됩니다) 찾을 수 없습니다.

sudo apt-get install libunac1-dev 

당신이 설치되고 나면이 함께 연결하는 컴파일러에게 (컴파일러 옵션에 -lunac를 추가해야합니다, GCC를 사용하는 가정 : 당신은 우분투에 있다면, 당신은 그것을 얻을 수 있습니다 unac 라이브러리).

+0

대단히 감사합니다. :) 다운로드 및 설치했지만 링크를 시도하고 컴파일 할 때 다음 오류가 발생합니다 :'/tmp/ccAKGVl9.o :'main '함수에서 : ILD.c :(. 텍스트 + 0x651) : 정의되지 않은' unac_string ' collect2 : 신분증 1 개 종료 상태를 반환 '내 코드 : '사용법 #include // ... 문자 * 아웃 = 0; size_t out_length = 0; if (unac_string ("ISO-8859-1", "été", strlen ("été"), & out, & out_length)) { printf ("unac_string"); } else { printf ("%. * s0", out_length, out); 무료 (out); }' – Jack

+0

'gcc'에서'-lunac' 옵션을 사용하여 해결했고'ISO-8859-1'을'UTF-8' 인코딩으로 변경 했으므로 이제는 잘 작동합니다. 대단히 고마워. :) – Jack

+0

. 천만에. 내가 대답에 그것을 편집 :) –