Adam
그는 물었다 12 лет назад
25

문자열을 쇱そ / 쇱そ c++에서

사람들이 할 수 있는 최선의 방법은 지정하십시오. / 대문자 소문자 문자열을 c++에서?

문제가 있다는 사실에 의해 복잡하게 isn& # 39 만 t, 잉글랜드의 C++ 프로그래밍 언어. 좋은 다국어 방법 있나요?

sorin
그는 10 лет назад 댓글을 달았습니다
3

현재 솔루션이므로 유니코드 호환적 점을 유념하십시오 아니다.

답변 9 개

#include <algorithm>
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(), ::toupper);

http://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/ &gt <;

또한 일반적인 문서 문자열을 고데프로젝트 방법: &lt, http://www.codeproject.com/KB/stl/STL_string_util.aspx&gt.

Darren Kopp
c0m4
그는 12 лет назад 댓글을 달았습니다
1

Include &lt algorithm&gt 필요가 있다고 한 합니다;; 변환 사용하기

Ron Klein
그는 11 лет назад 댓글을 달았습니다
7

39 을 사용하려면, 덤 quotes&quot &quot it& 더 나은 것 같아요. 이런 예는 ipv6-literal. 문자열으로 아닌 "스마트 인용 부호". 복사, 붙여넣기 컴파일하십시오 측면에서 더 잘 수 있습니다.

Nikolai
그는 7 лет назад 댓글을 달았습니다
3

비 ascii 문자열 이 작품을 어떻게 됩니까?

> std::string data = “Abc”; 
> std::transform(data.begin(), data.end(), data.begin(), ::toupper);

그러면 이 일을 하지만, 표준 &quot C&quot 사용하게 됩니다. 로케일입니다. If you need to get a 토로베르 다른 로케일에 facets 사용할 수 있습니다. 위의 코드는 facets 사용하여 다음과 같습니다.

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

GManNickG
viksit
그는 10 лет назад 댓글을 달았습니다
1

좋은 포인터입니다 감사합니다!

Nic 를 사용하여 복제본에 파스터스 맞춤법 오류, # 39 의 답을 찾을 수 있을 것으로 기대하고 있다 strong& 기록하십시오 &quot use_factet"; 그리고 세 번째 매개 변수를 누각되었습니다 표준용량 변형:

locale loc("");
const ctype<char>& ct = use_factet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

있어야 합니다.

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), str.begin(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

Nic Strong
그는 10 лет назад 댓글을 달았습니다
0

G 맨 위로 우리를 위해 다 같이 에스티스 감사합니다:)

이 질문 검토 할 수도 있습니다. 문제는 기본적으로 표준 라이브러리, 유니코드 데이터를 처리할 수 있도록 # 39 는 C/C++ weren& 구축됨 다른 라이브러리보다는 여바바 할 것으로 보인다.

C++ 표준 업데이트되도록 따라 변경될 수 있습니다. 다음 컴파일러와의 그러니까말이야 충스러웠으니 볼랜드 (코드기어) 은 유니코드 지원, 꼭 이래야겠어요 Microsoft& # 39 의 c++컴파일러 할 것, 또는 이미 지원하는 라이브러리를 유니코드 문자열.

그런 경우 부스트, 가장 간단한 방법은 있다. Have a look at [to_upper /to_lower 향상시키십시오 구체화하십시오 알고리즘 () () 의] [1].

[1]: http://www.boost.org/doc/libs/1_45_0/doc/html/string_algo/usage.html # id2570604

가장 쉬운 방법은 표준용량 변형 대런 말했지, 사용할 수 있다.

하지만, 예를 들어, 독일 등 일부 언어 그 저주가 좁히어 isn& 항상 1 대 1, t # 39 더 사이의 매핑을 대문자화. 이 &quot esset"; 소문자화 문자 (같이 그리스 문자 베타) 는, SS&quot &quot 변신했다. 대문자로.

Vcl '는' 이 '' 시수틸s.호프 디스크입니다. diskid '소문자화 (이니고데스트라잉바르)' 와 '대문자화 (이니고데스트라잉바르)' 를 사용할 수 있음). 내가 이 c++에서 구성기는 2009년.

나는 경우, 유니코드 (및 다국어) 자를 수 있는 방법을 알아야 변환하십시오 확장하지만 로켈을 / 찾기 (짐작이지만요.) 의 문자:

#include <locale.h>

_locale_t locale = _create_locale(LC_CTYPE, "Greek");
AfxMessageBox((CString)""+(TCHAR)_totupper_l(_T('α'), locale));
_free_locale(locale);

39 haven&, 내가 할 수 있는 방법이 아직 없다. 내가 아는 누군가가 방법을 알려주세요.

39, NULL 로 설정을 로케일에 doesn& 빗나갔다.

네 근데 아마 지원할 수 있는 어떤 스티브야 코드에 여러 언어로 말하고 있다 한 경우, 외상때문에 공장 캡슐화합니다 못하며창조된 관련 있는 방법을 기초로 하는 일련의 메서드입니다 토퍼 또는 토로베르 욕금지