2010-02-05 4 views
3

하나의 문자열이 유효한 단어인지 확인하기 위해 사전을 사용해야하는 프로그램을 작성해야합니다. 사용할 수있는 사전 라이브러리가 있습니까? 그렇지 않다면 어떻게 질의를위한 사전을 만들 수 있습니까?C 라이브러리의 사전 라이브러리

감사합니다.

+1

옥스포드 영어 사전과 같은 유효한 단어 사전과 유효한 단어를 확인하는 프로그램을 작성하는 데 사용할 수있는 지원 코드가 필요하다는 의미입니까? –

답변

8
struct Dictionary { 
    Dictionary() { 
    // load _words, here's one possible implementation: 
    std::ifstream input ("/usr/share/dict/words"); 
    for (std::string line; getline(input, line);) { 
     _words.insert(line); 
    } 
    } 
    bool contains(std::string const& word) const { return _words.count(word); } 

    std::set<std::string> _words; 
}; 
+0

현대적인 C++ 컴파일러 또는 Boost에 액세스 할 수있는 경우 std :: set보다 std :: tr1 :: unordered_set을 사용하는 것이 빠릅니다. – Manuel

+2

@ 마누엘 (Manuel) : 꼭 그런 것은 아니지만, 그렇다고해도 그것이 그를 위해 중요하다고 믿을만한 이유가 없습니다. lower/upper_bound를 사용할 수 있기 때문에 자동으로 정렬 된 std :: set을 유지하는 것이 좋습니다. 조숙 한 최적화와 1) 요구 사항 또는 2) 속도 테스트없이 "빠름"에 대해주의하십시오. –

+0

@ 로저 : 나는 나의 주장을 뒷받침 할 몇 가지 시험을했다. 58000 단어로 된 사전의 경우, 한 단어를 찾는 것은 tr1 :: unordered_set으로 평균 0.6 마이크로 초, std :: set로 0.8 마이크로 초가 걸립니다. 관심이있는 경우를 대비 한 코드는 다음과 같습니다. http://pastie.org/812479. 그래서 네, 결국 큰 차이가 없다고 생각합니다. – Manuel

2

파일에 단어 목록이있는 경우 std : map에로드하고 find 메서드를 사용하면됩니다.

+1

std :: set 또는 std :: tr1 :: unordered_set이면 충분합니다. – Manuel

4

단어를 저장하려면 STL set 또는 map을 사용해보세요. 단어 목록을 얻는 데있어 Google이 도움이 될 것입니다.

관련 문제