C++ 搜索引擎通用工具模块详解
在构建搜索引擎项目时,基础的工具类往往是复用率最高的部分。我们将文件 IO、字符串处理以及中文分词等通用功能封装为 usuallytool 模块,供索引构建和检索流程调用。
1. 文件读取工具 (FileUtil)
这个类负责从指定路径读取文件内容。为了适应不同场景,我们采用二进制模式打开文件,确保读取过程中不会意外修改原文件。函数返回布尔值标识操作是否成功,失败时会输出错误信息。
class FileUtil {
public:
static bool ReadFile(const std::string &file_path, std::string *out) {
// 以输入模式打开文件,二进制方式避免换行符转换问题
std::ifstream in(file_path, std::ios::in | std::ios::binary);
if (!in.is_open()) {
std::cout << "open file " << file_path << ": error" << std::endl;
return false;
}
std::string line;
// getline 重载了 bool 转换运算符,可直接用于循环判断
while (std::getline(in, line)) {
*out += line;
}
in.close();
return true;
}
};
注意这里 *out += line 只是将读取到的内容追加到目标字符串中,并没有尝试修改源文件,符合只读特性。
2. 字符串分割 (StringUtil)
利用 Boost 库的 split 函数可以高效地按分隔符切分字符串。我们在项目中统一使用 作为字段分隔符,并开启压缩模式以处理连续分隔符的情况。
class StringUtil {
public:
static void Split(const std::string& target, std::vector<std::string>* out, std::string sep) {
boost::(*out, target, boost::(sep), boost::token_compress_on);
}
};


