2010-11-21 4 views
2

나는 고유 한 단어를 셀 수있는 함수를하고 싶습니다. 예 :C++ 도움말의 고유 한 단어 수는 무엇입니까?

"유용한 프로그램을 만들고 싶다. 그리고 나는 먹고 싶어. 지금 아이스크림을 먹어." 이 경우

, 각각의 고유 한 단어 : 내가 나중에 사건을 무시

I occurs 2 
like occurs 2 
... 

. 제발 도와주세요

편집 :

기능을 작성했습니다. 그것은 완벽하게 작동합니다. 모든 도움에 감사드립니다. 대단히 감사합니다.

답변

2

std::map에 키 문자열 및 int 데이터를 사용하려는 것 같습니다.

항목이지도에 이미없는 경우 int 값이 1로 추가됩니다. 항목이지도에 이미있는 경우 이미 연결된 값에 1을 추가하기 만하면됩니다.

+0

나는 본다. 내가지도를 사용하고 있다면, 나중에 그것을 분류 할 수 있을까요? frequenzy –

+0

에 의하여 좋아하십시오 나의 대본이 이것과 유사한 경우에, 제발, 저를 인도하십시오 : http://forum.codecall.net/c-c/3162-need-help-w-word-count-program-asap.html. 매우 급한 것이 필요합니다. –

+0

@cpp_learner : 다른 측면이 확실하지 않으면 무엇이 당신을 혼란스럽게하는지에 대해 다른 질문을 할 수 있습니다. –

1

나는 이것을 숙제 질문으로 다룰 것이다. (아무도 완전한 코드를 제시 할만큼 무분별하지 않을 것이다.)

"단어"의 정의가 매우 불분명하다면, iostream 입력은 이미 입력을 단어로 나눕니다.

그런 다음 사용하십시오. 뚜렷한 단어를 집계하려면 std::map

건배 & HTH.,

+0

네, 숙제입니다. 나는 2 주 만에 cpp를 배운다. –

+1

오, 나중에 완전한 코드를 기대하지는 않는다. map 등을 사용하는 예제 코드가 있습니다. 다음에 –

+1

@cpp_learner에 대해 더 자세히 살펴 보겠습니다. C++에서'std :: map' 또는 다른 std 라이브러리 구조를 사용하는 방법에 대한 예제는 http : // cplusplus를 참조하십시오.com/reference/ – rubenvb

1

반복자와 표준 알고리즘에 익숙해있는 좋은 기회입니다.

std::istream_iterator 주어진 스트림에서 가져온 단어 목록에서 반복되며 std::cin 또는 파일 또는 문자열입니다.

목표에 도움이되는 std::unique이 있습니다.

예 프로그램은 :

#include <algorithm> 
#include <iostream> 
#include <vector> 

using namespace std; 


int main() 
{ 
    istream_iterator<string> begin(cin), end; 
    vector<string> tmp; 

    copy(begin, end, back_inserter(tmp)); 
    sort(tmp.begin(), tmp.end()); 
    vector<string>::iterator it = unique(tmp.begin(), tmp.end()); 

    cout << "Words:\n"; 
    copy(tmp.begin(), it, ostream_iterator<string>(cout)); 
} 

표준 라이브러리에 대한 자세한 참조 http://www.cplusplus.com를 참조하십시오.

+0

Nice try : 그러나 istream_iterator 은 단어를 공백으로 구분하여 정의합니다. 대부분의 컨텍스트에서는 괜찮습니다. 그러나 여기서 구두점이 작용할 것입니다. 또한지도가 자동으로 내용을 정렬하고 계산할 때 벡터를 사용하는 이유는 무엇입니까? –

+0

마지막 정렬은 줄 단위 정렬보다 어렵습니다 ... –