J'essaie de savoir si deux chaînes que j'ai sont les mêmes, à des fins de tests unitaires. Le premier est une chaîne prédéfinie, codée en dur dans le programme. La seconde est une lecture à partir d'un fichier texte avec un ifstream utilisant std :: getline(), puis prise comme une sous-chaîne. Les deux valeurs sont stockées en tant que chaînes C++.C++ - string.compare les problèmes lorsque la sortie vers un fichier texte est différente de la sortie de la console?
Quand je sortie les deux cordes à la console à l'aide pour les tests Cout, ils ont tous deux semblent identiques:
ThisIsATestStringOutputtedToAFile ThisIsATestStringOutputtedToAFile
Cependant, les déclarations de String.Compare indiquant qu'ils ne sont pas égaux. Lors de la sortie dans un fichier texte, les deux chaînes apparaissent comme suit:
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
Je suppose que c'est une sorte de problème d'encodage, et si j'étais dans ma langue maternelle (bon vieux C#), je wouldn pas trop de problèmes. Comme je suis avec C/C++ et Vi, et franchement ne sais pas vraiment où aller à partir d'ici! J'ai essayé de convertir peut-être/de ansi/unicode, et aussi en supprimant les caractères étranges, mais je ne suis même pas sûr si elles existent vraiment ou pas ..
Merci d'avance pour toute suggestion.
EDIT Toutes mes excuses, c'est la première fois de poster ici. Le code ci-dessous est comment je vais passer par le processus:
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);
On dirait que votre deuxième chaîne est 2byte unicode? – falstro
Vous devez nous indiquer les types exacts des chaînes, comment vous les produisez, et comment vous les comparez - dans le code s'il vous plaît. – sbi