【发布时间】:2009-11-19 09:36:20
【问题描述】:
出于单元测试的目的,我试图找出我拥有的两个字符串是否相同。第一个是预定义的字符串,硬编码到程序中。第二个是使用 std::getline() 从带有 ifstream 的文本文件中读取,然后将其作为子字符串。这两个值都存储为 C++ 字符串。
当我使用 cout 将两个字符串输出到控制台进行测试时,它们看起来都是相同的:
ThisIsATestStringOutputtedToAFile ThisIsATestStringOutputtedToAFile
但是,string.compare 返回表明它们不相等。输出到文本文件时,两个字符串如下所示:
ThisIsATestStringOutputtedToAFile T^@h^@i^@s^@I^@s^@A^@T^@e^@s^@t^@S^@t^@r^@i^@n^@g^ @O^@u^@t^@p^@u^@t^@ t^@e^@d^@T^@o^@A^@F^@i^@l^@e
我猜这是某种编码问题,如果我使用的是我的母语(好旧的 C#),我不会有太多问题。因为它是 C/C++ 和 Vi,坦率地说,我真的不知道从这里去哪里!我已经尝试查看可能转换为/从 ansi/unicode 转换,还删除了奇怪的字符,但我什至不确定它们是否真的存在..
提前感谢您的任何建议。
编辑 抱歉,这是我第一次在这里发帖。下面的代码是我正在经历的过程:
ifstream myInput;
ofstream myOutput;
myInput.open(fileLocation.c_str());
myOutput.open("test.txt");
TEST_ASSERT(myInput.is_open() == 1);
string compare1 = "ThisIsATestStringOutputtedToAFile";
string fileBuffer;
std::getline(myInput, fileBuffer);
string compare2 = fileBuffer.substr(400,100);
cout << compare1 + "\n";
cout << compare2 + "\n";
myOutput << compare1 + "\n";
myOutput << compare2 + "\n";
cin.get();
myInput.close();
myOutput.close();
TEST_ASSERT(compare1.compare(compare2) == 0);
【问题讨论】:
-
看起来你的第二个字符串是 2byte unicode?span>
-
您需要告诉我们字符串的确切类型、输出方式以及比较方式 - 请在代码中。