我最近遇到了这个面试问题,涉及从一组文本文件中搜索字符串。
如何在数据库中搜索匹配的字符串,忽略某些标点符号/特殊字符?你会做什么预处理?
我理解字符串搜索是很常见的问题。我希望能够深入了解如何在文本中搜索字符串时忽略特殊字符或标点符号。
我尝试/尝试过的解决方案:
模式匹配算法,如KMP或BM,需要花费O(n)时间将字符串与文本文件中的每个单词进行比较。我不确定是否使用任何这些是有效的方法。
我还考虑过将数据库中的所有文本文件处理成Trie类型的结构,然后搜索Trie。当我们在数据库中有数百万个文本文件要搜索时,可能会发生这方面的问题,并且我最终会为此创建Trie。
我不确定哈希表在这种情况下是否有用?
我对这个问题的方法更感兴趣,然后是代码。
答案 0 :(得分:1)
首先,我们将从文本文件中删除特殊字符,这里是简单的代码怎么做
#include <iostream> // std::cin, std::cout
#include <fstream>
#include <string>
using namespace std;
int main () {
char str[256];
cout << "Enter the name of an existing text file: ";
cin.get (str,256);
std::ifstream is(str); // open file
string s ="";
char c;
while (is.get(c)) {// loop getting single characters
if((c >= 97 && c<= 122)|| c==' ' ||(c >=65 && c<=90))
s+=c;
}
is.close(); // close file
return 0;
}
现在我们的文字在string 's'
中没有特殊字符,现在您可以应用KMP
算法