#c #io #compare
#c #io #Сравнить
Вопрос:
Я прошу пользователя ввести слово, затем моя программа сравнивает его с файлом input .txt, но даже если я ввожу ровно слово в data.txt он по-прежнему выполняет false.
//------------in my data.txt---------
// Banana Bed Today
// Apples Chair Window
// Corn Tomorrow Hive
string testData;
cout<<"enter Data: ";
cin>>testData;
for(i=0; i<s.size()-1; i ){
if (testData.compare(s[i]->name) == 0)
cout<<"Rightn";
if (youkno.compare(s[i]->name) != 0)
cout<<"Wrongn";
}
если я запрошу банан, то вывод будет ошибочным
Комментарии:
1. Как вы считываете тестовые данные (
s
)? Ваш код также содержит ошибки, но это не относится к вашему конкретному примеру.
Ответ №1:
Если вы замените:
for(i=0; i<s.size()-1; i ){
с:
for(i=0; i<s.size(); i ){ // Adjusting to check last entry as well.
cout << "[" << s[i]->name << "][" << testData << "]" << endl;
вы можете обнаружить, что это становится ослепительно очевидным. Есть большая вероятность, что одна из ваших строк не совсем соответствует вашим ожиданиям.
Комментарии:
1. Спасибо. Я не знаю, почему я не думал о том, чтобы протестировать его таким образом.
Ответ №2:
Что в s[i]->name
? Если вы прочитали эти данные из файла, возможно, вы включили в переменную окончания строк name
.
Кроме того, почему бы не использовать operator==
?
РЕДАКТИРОВАТЬ: только что заметил, что у вас есть ошибка off by one. ваш цикл for должен быть
for(i=0; i<s.size(); i )
В противном случае вы не сравниваете последний элемент значения в s
Комментарии:
1. Я думаю, что основное отличие
op==
заключается в том, что создается объект temp string (не то, чтобы это имело значение, если вы действительно не стремитесь к производительности).2. оператор @paxdiablo== не создает временный
3. Интернет говорит иначе, по крайней мере, в случае, когда один
char*
из них —compare
похоже, не имеет такого поведения или, по крайней мере, это не задокументировано: cplusplus.com/reference/string/operators (хотя я ничего не знаю о достоверности этого сайта, и я был бы более чем готов доказать свою неправоту).4. @paxdiablo мы не знаем, что это за тип
s[i]->name
. Если это std::string, то временная ОС не создается