Почему сравнение двух строк не дает желаемого результата? - PullRequest
4 голосов
/ 28 сентября 2011

Ниже приведен код, который я придумал, и, если честно, сегодня вечером я впервые попробую написать код. Однако я не могу заставить мой оператор if работать должным образом. Он просто переходит на другое, даже если я наберу Westley или Westley или (space) Westley.

Я хочу, чтобы программа могла принимать любые имена членов моей команды, однако я решила, что мое имя будет работать, а затем я смогу добавить остальные из них позже. Любые мысли или помощь будут замечательными. Кроме того, в качестве примечания, я собирался попытаться зациклить его, если он перешел к остальному, до начала каких-либо мыслей по этому поводу? Спасибо

#include <iostream>
using namespace std;

int main ()
{
  char Westley[] = "Westley";
  char Alex[] = "Alex";
  char Andrea[] = "Andrea";
  char Bee[] = "Bee";
  char Gia[] = "Gia";
  char KaYeng[] = "Ka Yeng";
  char Chi[] = "Chi";
  char Corinne[] = "Corinne";
  char Joyce[] = "Joyce";
  char Parish[] = "Parish";
  char membername [80];
  cout << "Please Enter a Beta Team Members Name.\n";
  cin >> membername;
  if (membername == Westley)
  {   cout << "BETA TEAM ROSTER!!\n";
      cout << "Westley.\n";
      cout << "Alex.\n";
      cout << "Andrea.\n";
      cout << "Bee.\n";
      cout << "Gia.\n";
      cout << "Ka Yeng.\n";
      cout << "Chi.\n";
      cout << "Corinne.\n";
      cout << "Joyce.\n";
      cout << "Parish.\n";
  }
  else
      cout << "Not a Valid Beta Team Members Name!\n" << "Please Enter a Beta Team Members Name"<< endl;
cin >> membername;
  return 0;
}

Ответы [ 8 ]

5 голосов
/ 28 сентября 2011

Не использовать char[]; используйте std::string для такого рода вещей, поскольку он знает, как сделать сравнение полезным способом (сравнение между массивами символов проверяет, являются ли они одним и тем же массивом, а не, если содержимое идентично).

4 голосов
/ 28 сентября 2011

это c ++, и вы используете массив символов, а не строку, которую нужно использовать strcmp для сравнения строк

вы можете сделать это как

if(strcmp(membarname, Westley))

или, если возможно, вы можете использовать std::string вместо char[] для хранения строки, тогда вы можете использовать == operator

Вы можете использовать std::string следующим образом

#include <string>
using namespace std;

int main(){
    string Westley = "Westley";

    ....

    string membername;
    cout << "Please Enter a Beta Team Members Name.\n";
    cin >> membername;
    if (membername == Westley){

        ....
    }
    ....
}
4 голосов
/ 28 сентября 2011

Нельзя использовать оператор "==".Попробуйте узнать больше о

strcmp

if (strcmp(membername, "Westley") == 0)
   ...
2 голосов
/ 28 сентября 2011

вместо символьного массива char[];используйте std::string, и вы получите желаемый результат.

if (membername == Westley)

Поскольку для данных char[] приведенное выше сравнение приводит к сопоставлению адресов , а не сравнению содержимого .

1 голос
/ 28 сентября 2011

Поскольку вы работаете с массивами, вам нужно использовать вместо этого strmcp, например,

if (!strcmp(membername, Westley) ...

, поскольку вы работаете в C ++, используйте вместо него строку:

#include <string>

using namespace std;

string Westley = "Westley";

... thenВы можете сделать

if (membername == Westley) ...
0 голосов
/ 28 сентября 2011
if (membername == Westley)

сравнивает значение только двух указателей.

0 голосов
/ 28 сентября 2011

Оператор ==, который вы используете, сравнивает адреса строк.Для сравнения двух строк C используйте функцию strcmp из <cstring> (string.h).В C ++ вы должны использовать шаблон класса std::string, который можно интуитивно сравнить с помощью оператора ==.

0 голосов
/ 28 сентября 2011

Прежде всего, если вы кодируете на C ++, вы должны использовать std::string вместо char [].Удобно то, что вы можете сравнивать две строки (увы, с char [] вы должны вызывать такие функции, как strcmp или тому подобное).

Например:

#include <iostream>
#include <string> // <-- important
using namespace std;

int main ()
{
    string Westley("Westley");
    ...

    if(membername == Westley) // now works!
    {
        ...
...