我試圖找出,如果我有兩個字符串是相同的,爲了單元測試的目的。第一個是預定義的字符串,硬編碼到程序中。第二個是使用std :: getline()從文本文件中讀取ifstream,然後將其作爲子字符串。這兩個值都存儲爲C++字符串。C++ - 當輸出到文本文件與控制檯輸出不同時出現string.compare問題?
當我輸出都用COUT進行測試的字符串到控制檯的,他們都似乎是相同的:
ThisIsATestStringOutputtedToAFile ThisIsATestStringOutputtedToAFile
然而,string.compare回報,說明他們是不相等的。當輸出到文本文件時,兩個字符串如下所示:
ThisIsATStringStringOutputtedToFile T^@ h^@ i^@ s^@ I^@ s^@ A^@ T^@ e^@ s^@ t^@ S^@ t^@ r^@^@^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^我猜這是一種編碼問題,如果我用我的母語(很好的舊C#),我wouldn不會沒有太多問題。就像我用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? – falstro 2009-11-19 09:38:40
你需要告訴我們字符串的確切類型,你如何輸出它們,以及如何比較它們 - 請在代碼中。 – sbi 2009-11-19 09:40:12