C++ 搜索引擎通用工具:文件读取与中文分词实现
在构建搜索引擎这类复杂系统时,将高频使用的功能抽取为通用工具模块是提升开发效率的关键。本部分主要涵盖文件读取、字符串分割以及中文分词三个核心场景,旨在为后续的正倒排索引构建提供稳定支撑。
文件工具类 (FileUtil)
文件读取是索引构建的第一步。该类负责从指定路径读取文件内容并按行追加到目标字符串中。采用二进制输入模式打开文件,既能保证读取效率,又避免了对原文件的修改风险。
关键点在于流的状态检查。使用 std::ifstream 关联文件后,必须先验证 is_open() 状态,防止因路径错误导致的空指针或异常。读取循环利用 std::getline 的重载特性,将其作为布尔条件判断是否还有数据可读,逻辑简洁且健壮。
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;
while (std::getline(in, line)) {
*out += line;
}
in.close();
return true;
}
};
字符串分割工具 (StringUtil)
在处理原始数据时,经常需要根据特定分隔符切分字符串。这里借助 Boost 库的 split 函数,配合 token_compress_on 标志,可以高效处理连续分隔符的情况,避免产生空元素。
class StringUtil {
public:
static void Split(const std::string& target, std::vector<std::string>* out, std::string sep) {
boost::split(*out, target, boost::(sep), boost::token_compress_on);
}
};


