2015-02-03 3 views
-2

나는 프로그램을 작성하고 문자열의 양과 문자열을 반환하는 함수를 작성해야합니다. 사용자가 쓴 문자열 (mystring)이 있는데 문자열과 문자의 정확한 양을 반환하는 함수가 필요합니다. 예를 들어 "Hello World"는 10 개의 문자와 1 개의 공백이 있으므로 11을 반환해야합니다. 나는 string :: size가 존재한다는 것을 알고 있지만, 바이트로 크기를 리턴한다. 이것은 나에게 유용하지 않다.C++에서 문자열의 길이를 찾는 방법

+0

이것은 cstring 또는 문자열 클래스 인스턴스입니까? – CorbinMc

+0

저는 C++을 처음 사용했습니다 (실제로 2 일 전에 시작되었습니다). 을 포함하고 std :: string mystring을 사용했습니다. , 나는 문자열 클래스 인스턴스가 무엇인지 모르겠다. 그러나 나는 그것의 cstring을 생각하지 않는다. # 을 포함 할까? –

+0

FYI http://rextester.com/BYLO97697 – P0W

답변

1

문자열이 ascii으로 인코딩되었거나 multi-byte 형식으로 인코딩되어 있는지 먼저 확인해야합니다.

아스키의 경우 string::size이면 충분합니다. 문자열의 length 속성을 사용할 수도 있습니다.

후자의 경우 number of bytes per character을 찾아야합니다.

1

string::size을 사용하여 배열의 크기를 바이트 단위로 가져온 다음 해당 문자열의 요소 크기 (바이트 수 : char)로 나누어야합니다. 같을 것이다

: int len = mystring.size()/sizeof(char);

그냥 iostream, 표준 : sizeof 연산자가 들어있는 헤더 파일을 포함해야합니다.

+1

하지만'sizeof (char)'는 언제나 정의에 의한 것입니다. 1 –

+0

al-Acme이 말했듯이'chars'는 다중 바이트로 인코딩 될 수 있습니다. 확실히 드문 상황입니다. – CorbinMc

+0

사실, 일부 UTF8 문자 (실제로는 글리프)는 * 연속 된 *'char'-s로 인코딩됩니다. 그렇다면 UTF8 문자열의 글리프 수를 계산하는 UTF8 라이브러리를 사용해야합니다. –

2

문자열의 길이를 문자로 입력하거나 글자와 공백의 수를 계산하기 원하는지 확실하지 않습니다.

아주 간단하지만 당신은 문자와 공간의 양을 얻을 수 (문자 다른 모든 유형의 무시) 할 수 있습니다, 단지 문자와 공백을 계산 할 수 있습니다 특정 기능이 없습니다 :

#include <string> 
#include <algorithm> 
#include <cctype>  
int main() { 
    std::string mystring = "Hello 123 World"; 
    int l = std::count_if(mystring.begin(), mystring.end(), [](char c){ return isspace(c) || isalpha(c); }); 
    return 0; 
} 

그렇지 않은 경우를 제외하고는 비 ASCII 문자열을 사용하면 std::string::length이 효과적입니다.

일반적으로 1 바이트가 반드시 한 문자를 의미하지 않는다고 가정하면 그렇게 간단하지 않습니다. 그러나, 당신이 배우는 경우에, 당신은 unicode 및 동반 nastiness를 아직 취급 할 필요 없다. 지금은 1 바이트가 1 문자라고 가정 할 수 있습니다. 일반적으로 사실이 아닙니다.

+0

대단한 답변입니다. 더하기 하나 –

+0

감사합니다, 나는 1 문자가 1 바이트라고 가정하지 않았습니다. 위의 코드를 사용하게 될 것입니다. 왜냐하면 mystring이 내 프로그램의 문자를 유니 코드로 포함 할 수 있기 때문이며, 모든 것을 필터링하는 방법이 필요했기 때문에이 문제를 해결합니다. 다른 캐릭터들! –

관련 문제