c++ - 如何读取有拼写错误的格式化数据?

标签 c++ string fstream

已经有几个线程处理格式化字符串的读取,但我的问题是我的文本文件偶尔会有拼写错误。这是我的大部分字符串的示例:

Par(custom)1929;

我遇到的问题是一些字符串看起来像这样:

Par({custom)1929:

我想知道如何识别不遵循正确格式的字符串,我会抛出一个错误。我只是找不到可靠的方法来搜索字符串和查找拼写错误。

编辑:

这是我使用的示例代码,字符串中没有拼写错误。如果字符串中没有拼写错误,这将得到中间词“custom”。单词是字符串。 com.fi 是我存储信息的数据元素。

int left = word.find("(");
int right = word.find(")");
com.fi = word.substr(left+1,right - lbraq - 1);

最佳答案

您的格式化字符串是在不同的行上还是它们之间有一些统一的间距?如果是这样,您可以结合使用 std::ifstream 和 C++ 正则表达式库,如下所示:

std::ifstream inf(...); // filename
const std::regex rgx("Par\\(\\w+\\)[0-9]{4}");
std::string read;
while (std::getline(inf, read)) {
    if (!std::regex_match(read, rgx)) { /* error handling here */ }
}

双反斜杠防止编译器将转义的正则表达式字符读取为实际转义字符,而 w 表示单词,如数字和字母,而 plus 表示匹配一个或多个单词字符。括号内的范围是一个捕获组,用于捕获您在其中指定的某些字符,在本例中是任何数字字符。捕获组后面的大括号在其中指定了我们要匹配的组的数量,在本例中为四个字符。我避开了括号,因为它们对正则表达式匹配很重要。

如果我在此处使用的格式与您的格式不匹配,C++ 使用的正则表达式语法很大程度上基于 JavaScript 的语法,并且您可以使用多个站点来测试 JavaScript 正则表达式,例如 regex101.com。

关于c++ - 如何读取有拼写错误的格式化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675831/

相关文章:

c++ - 从函数返回指针。一个指针的值未更新

c++ - 在 fstream 上使用 << 进行写入

c++ - 写入具有 map 容器内容的文件 C++

C++ 函数在其他函数完成之前完成

c++ - 编程语言包装器

c++ - G++/MSVC++2008 在矩阵实现中调用 inner_product() 的区别

c++ - 比较两个字符串(但类型不同)

.net - 从字符串中拆分整数

java - 将整数连接到字符串 - 从性能和内存的角度来看,使用字符串文字还是原语?

c++ - 从文本文件打开和编辑数值数据并将结果放入新文件,C++