2010-06-01 7 views
6

문장을 수락하기 위해 std::string 유형을 사용합니다. 연습을 위해 (C++의 문자열로 많은 작업을하지 못했습니다.) 저는 문자가 모음인지 아닌지 확인하고 있습니다. 나는이있어 :C++ : 읽을 때 항상 공백이 문자열을 종료합니까?

for(i = 0; i <= analyse.length(); i++) { 
if(analyse[i] == 'a' || analyse[i] == 'e' [..etc..]) { 
...vowels++;  
} else { ... 
...consonants++; 
} 

문자열이 모두 한 단어 인 경우이 잘 작동하지만, 두 번째는 내가 공백을 추가 (IE : aeio aatest)는 첫 번째 블록을 계산하고, 같은 공간을 계산합니다 자음, 그리고 문장을 읽는 것을 중단합니다 (for 루프 나 다른 것을 빠져 나옵니다).

공백이없는 문자 == null로 계산합니까? 또는 std::string과 같은 이상한 점이 있다면, 그 이유를 아는 것이 도움이 될 것입니다.

편집 : 단순히 표준 : CIN를 통해 문자열을 수용하고있어, 같은 :

std::string analyse = ""; 
std::cin >> analyse; 
+0

std :: string이 아니며 공백과 null을 포함하여 모든 문자를 포함 할 수 있습니다. 문자열을 읽는 방법을 보여줍니다. –

+0

'analyse'는 어떻게 설정하나요? 'cout << analyse.length()'라고하면 어떻게 될까요? "aecio"문자열이 올바르게 계산됩니까? 어쩌면 문제는 else 블록의'... '부분에있을 것인가? –

+1

한쪽에 .. 변수에 길이를 저장하십시오 (const int ci = analyse.length();) for 함수는 나쁜 습관입니다. – baash05

답변

9

your_stream >> your_string;과 같은 문자열로 읽는 것 같아요. 문자열의 연산자 >>scanf%s 변환과 동일하게 작동하도록 정의되어 있으므로 공백을 발견 할 때까지 읽습니다. 따라서 operator>>도 마찬가지입니다.

std::getline 대신 전체 입력 행을 읽을 수 있습니다. 이전 질문에 게시 한 answer을보고 싶을 수도 있습니다 (std::getline에 대한 대안을 제공).

+0

답변 링크를 보내 주셔서 감사합니다. +1 – Nullw0rm

4

난 당신이 붙여 넣은 코드에서 말할 수는 없지만, 내가 갈거야 (Stream >> string)을 사용하여 문자열을 읽는다고 추측 할 수 있습니다.

스트림 추출 연산자는 공백을 만나면 중지됩니다.

이 상황이 아닌 경우 문자열을 채우는 방식과 그 내용은 무엇인지 보여줄 수 있습니까?

내가 맞다면 문자열에 내용을 읽는 다른 방법을 원할 것입니다. std :: getline()은 아마도 파일에서 읽기 쉬운 방법 일 것입니다. 그것은 공백 문자 대신에 줄 바꿈 문자에서 멈춘다. 편집 된 질문에 따라


편집 : (.. 구문 양쪽을 내 컴파일러의 앞에 아니에요) 사용이 :

std::getline(std::cin, analyze); 

이것은 당신이 누를 때 읽는 중지한다고 "를 입력 ".

2

전체 행 (공백 포함)을 읽으려면 getline을 사용하여 읽어야합니다. 개략적으로는 다음과 같습니다

#include <string> 
istream& std::getline(istream& is, string& s); 

이 같은 일을 할 줄 전체를 읽으려면 :

string s; 
getline(cin, s); 
cout << "You entered " << s << endl; 

PS를 : 단어는 "자음"이 아닌 "consenent"입니다.

+0

getline이 정상적으로 작동합니다. 그것이 임의의 문제가 아니었기 때문에 다행스럽게도 배울 수 있습니다. – Nullw0rm

1

istream의 >> 연산자는 공백의 문자열을 구분합니다. 전체 줄을 찾으려면 readline(cin,destination_string)을 사용할 수 있습니다.

+0

아마도'readline'이 아닌'getline'을 의도하셨습니까? 'readline'이라는 함수를 포함하는 라이브러리가 있지만 표준 라이브러리에는 포함되어 있지 않습니다. –

+0

그래, 나는 getline을하려고 했어. (그리고 readline을 사용하는 다른 ** ** ** 언어들입니다. 그래서 나는 혼란스러워하고 있습니다.) –

관련 문제