3

我尝试使用普通的正则表达式,一切都很好,当我切换到用于在 Unicode 字符中搜索和标记化的 wregex 时,它失败了,我不明白为什么。
有人可以指出我在这里缺少什么吗?

map<string, int> container;
wifstream file("ftest.txt"); 
wregex reg(_T("\\w+"));
wstring s=_T("");
while (file.good())
{
    file>>s;
    for ( wsregex_iterator it (s.cbegin(), s.cend(), reg),it_end; it != it_end; ++it)
    {
        container[(*it)[0]]++ ;
    }

}

我的文件的内容是波斯语,例如:

بسم الله الرحمن الرحیم 
تست یک تست 2 . 2357 نفر آمار تست اولیه هرچی!!

这些是它产生的错误:

错误 C2679:二进制“[”:未找到采用“const std::sub_match<_BidIt>”类型的右侧操作数的运算符(或没有可接受的转换)

IntelliSense:没有运算符“[]”与这些操作数匹配,操作数类型为:std::map、std::allocator>> [ const std::sub_match>>> ]

4

1 回答 1

2

s.begin() 和 s.end() 应该返回 wstring 迭代器(使 sa wstring)。

这就是你如何使用 wstring 和 ifstream 如何使用 std::ifstream 读取具有宽字符串路径的二进制文件

地图应该map<wstring, int>也是。

于 2013-07-21T07:00:31.683 回答