【发布时间】:2011-08-22 10:54:32
【问题描述】:
我有两个词,它们都是 std::string 类型,它们是 unicode 词。它们是相同的,我的意思是当我将它们写入某个文件时,它们都具有相同的表示形式。但是当我调用 word1.compare(word2) 时,我没有得到正确的结果。为什么他们不一样? 或者我应该使用另一个函数而不是 compare 来比较两个 unicode 字符串? 谢谢
ifstream myfile;
string term = "";
myfile.open("homograph.txt");
istream_iterator<string> i(myfile);
multiset<string> s(i, istream_iterator<string>());
for(multiset<string>::const_iterator i = s.begin(); i != s.end(); i = s.upper_bound(*i))
{
term = *i;
}
pugi::xml_document doc;
std::ifstream stream("words0.xml");
pugi::xml_parse_result result = doc.load(stream);
pugi::xml_node words = doc.child("Words");
for (pugi::xml_node_iterator it = words.begin(); it != words.end(); ++it)
{
std::string wordValue = as_utf8(it->child("WORDVALUE").child_value());
if(!wordValue.compare(term))
{
o << wordValue << endl;
}
}
第一个词是“term”,第二个词是wordValue; as_utf8() 的重载函数是:
std::string wordNet::as_utf8(const char* str)
{
return str;
}
【问题讨论】:
-
“代表”是什么意思?两个字符串都打印相同的内容吗?因为这没有任何意义。
std::string可以在里面有\0,如果两个字符串都有它并且在\0之后它们不同,则预计compare将返回false。向我们展示一些代码 + 示例(+ 文件以及如何打开/阅读它)。 -
当你把它们写出来时,你使用的是什么字符集?
-
其中一个词是波斯语单词,我将其写入某个文件并使用 istream_iterator(file) 读取它。另一个字符串是 pugixml::child_value() 的返回值,它基本上是 pugi::char_t* 类型,然后我将其转换为字符串 suing as_utf8
-
我编辑了我的问题并在其中添加了一些细节