2014-05-24 2 views
0

나는 다음과 같은 코드가 있습니다 코드에서길이()

ifstream file(filename); 
for(string word; getline(file, word);){ 
    if(word.size() == letters){ 
     cout << "word: " << word << endl; 
     cout << "size: " << word.size() << endl; 
     dict.push_back(word); 
    } 
} 

filename는 "dict.txt"와 같은 dictoinary 파일입니다. "dict.txt"에 다음과 같이 표시됩니다.

aa 
aah 
aahed 
aahing 
aahs 
... 

위의 그림에서 보듯이 많은 단어가 있습니다. letters은 13이라고 가정합니다. 따라서 코드는 abacterialope과 같이 13 자의 단어를 인쇄해야합니다. 그러나 실제로 12 글자를 가진 단어를 인쇄합니다. word.size()은 13입니다.

그럼 왜 이런 일이 일어날 수 있습니까? 내 기억과 마찬가지로 size()은 문자 수를 string에 인쇄해야합니다. 사용

+0

마 너 안에있는 줄들. r 파일의 뒤에 공백이 있습니까? 보이는 문자를 출력하여 문자열이 끝나는 곳을 표시하십시오. 예를 들어'cout << "단어 :"<< word << "> \ n "; –

+1

\ r과 같은 숨겨진 문자일까요? 콘솔 출력은 무엇입니까? – DiscoStu

+0

어떤 시스템에서이 문자가 실행 되었습니까? 사전은 어디에서 왔습니까? 어떻게 시스템에 왔습니까? - 출력 할 때 문자열을 '' '등과 유사하게 인쇄하십시오. – laune

답변

0

모든 단어 (공백, 탭, 줄 바꿈 등 캐리지 리턴) 다음은 하나의 함수 호출에 벡터로 전체 파일을 얻을 수 있습니다 구분 공백 인 경우 :

std::copy(std::istream_iterator<std::string>(file), 
      std::istream_iterator<std::string>(), 
      std::back_inserter(dict)); 

참고 :


당신이 다음 13 개 문자가 아닌 모든 단어를 제거하려는 경우, 당신이 할 수있는

dict.erase(std::remove_if(std::begin(dict), std::end(dict), 
          [](const std::string& s) { return s.length() != 13) }); 

참고 :

0

봅니다 :

getline(file, word. " ") 

이 후행 공백을 무시합니다.