이 경우 해시 테이블을 사용해야한다고 생각합니다. 이 상황에 대한 정규 표현식은 간단한 해시 테이블과 비교할 때 번거롭고 계산 상 비쌉니다. 해시 테이블은 키 - 값 쌍을 보유하는 연관 배열입니다. 키 (예 : 문자열)를 숫자 (입력에 다음에 나타나는 횟수)와 일치시킬 수 있습니다. 데이터베이스의 모든 문자열을 값이 0 인 키로 해시 테이블에 배치하기 만하면됩니다. 입력 텍스트의 모든 문자열을 검사하여 해시 테이블에 있는지 확인하십시오. 맞으면 값을 증가시키고, 그렇지 않으면 아무것도하지 않습니다. C++, Java, C#, Python 및 기타 대부분의 범용 언어는 해시 테이블을 구현합니다.
#include<iostream>
#include<unordered_map>
#include<string>
#include<fstream>
int main()
{
std::unordered_map<std::string, int> map;
std::ifstream matches("matches.txt");
std::ifstream input("input.txt");
std::string in;
while(matches>>in){
map[in] = 0;
}
while(input>>in){
if(map.find(in) != map.end())
++map[in];
}
for(auto i : map)
std::cout<<i.first<<" "<<i.second<<std::endl;
return 0;
}
이 C++ 코드 (AN unordered_map도 불리는) 해시 테이블을 생성합니다 :이 기능을 보여줍니다 C에서 간단한 프로그램을 ++ 썼다. 그런 다음 DB의 패턴을 나타내는 "matches"를 읽고 초기 키가 0 인 테이블에 추가합니다. "입력"스트림에서 입력을 읽고 해시 테이블에 있는지 확인합니다. 일치하는 경우 키 값을 증가시킵니다. 그런 다음 프로그램은 각 요소가 키 - 값 순서로 나타나는 표의 요소를 인쇄합니다. 언어이지만, 대답은 아마도 정규식 트라이가 무엇인지
확실하지. 힌트를 얻으려면 [이 답변] (http://stackoverflow.com/a/42789508/3832970)을 참조하십시오. –