строка.сравнение для c

#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, то временная ОС не создается