2013-09-29 3 views
0

현재 고유 한 단어뿐만 아니라 고유 한 줄을 찾는 코드를 작성하려고합니다. 내가 시도한 고유 한 행에 대한 코드는 있지만 고유 한 행에 대해서는 올바르게 계산되지 않습니다. 나는 그것이 입력을 무시하고 여전히 문자, 단어, 문장 등을 포함하는 라인을 세고 있다고 믿습니다. 그래서 나는 그것이 라인으로 들어가고 (공백 라인)를 셀 수있는 추가 라인을 세지 않고 덧붙이는 데 도움이 필요합니다. 같은. 몇 가지 다른 줄을 테스트했기 때문에 이런 일이 발생하고 있음을 알았습니다. 독특한 단어에 관해서는, 나는 심지어 시작하는 방법을 모른다 :/코드를 수정하여 고유 한 행 수를 올바르게 계산하는 방법은 무엇입니까?

unsigned long countULines(const string& s) 
{ 
    set<string> wl; 
    string ulines; 
    for(int ul = 0; ul < s.size(); ul++){ 
     wl.insert(ulines); 
    } 
    return wl.size(); 
} 
+1

'ulines' 루프 내부에 수정되지 않습니다. 전체 루프는 기본적으로 첫 번째 삽입 후 아무 작업도 수행하지 않습니다. –

+0

'string'에's'을 고집하고'getline'을 사용해야합니다. – goji

+0

여러 줄이 포함되어 있지 않으면 전체 기능이 무의미합니다. – goji

답변

0

이 당신을 위해 작동합니다

#include <iostream> 
#include <sstream> 
#include <string> 
#include <set> 

size_t countUniqueLines(const std::string& s) 
{ 
    std::set<std::string> uniqueLines; 
    std::istringstream is(s); 

    std::string line; 
    while (std::getline(is, line)) { 
     if (!line.empty() && line[line.size() - 1] == '\r') {  
      line.erase(line.size() -1); 
     } 
     uniqueLines.insert(line); 
    } 

    return uniqueLines.size(); 
} 

int main() 
{ 
    const std::string myLines = "four\none\n\ntwo\nthree\nthree\n\n"; 

    std::cout << countUniqueLines(myLines) << std::endl; 
} 
+0

고마워, 더 좋지만 빈 줄은 아직 세지 않는다고 생각한다. – user2829430

+0

분명히 여기 있습니다. "\ n"(1), "\ n"(1), "\ n"(2), 1 "two \ n", "three \ n "(1) == 총 7 행, 5 고유. 그 중 2 개는 빈 줄이 하나의 고유 한 줄로 계산됩니다. – goji

+0

흠, 이상 하네. 테스트중인 두 텍스트 파일이 올바른 대답을 제공하지 않습니다. 그 중 하나는 "이것은 시험입니다 \ n 이것은 다른 시험입니다 \ n 이것은 같은 줄입니다 \ n 이것은 같은 줄입니다"대답이 3이 될 때 4를 제공합니다. – user2829430

관련 문제