为什么比较2个字符串不能得到理想的结果?

时间:2011-09-28 08:43:10

标签: c++ string comparison strcmp

以下是我提出的代码,今晚我是第一次尝试编码。但是我似乎无法使if语句正常工作。即使我输入Westley或Westley或(空间)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 个答案:

答案 0 :(得分:5)

不要使用char[];使用std::string来做这种事情,因为它知道如何以有用的方式进行比较(char数组之间的比较测试它们是否是相同的数组,而不是内容相同)。

答案 1 :(得分:4)

您不能使用“==”运算符。尝试了解更多有关

的信息
  

的strcmp

if (strcmp(membername, "Westley") == 0)
   ...

答案 2 :(得分:4)

这是c ++,你使用的是char数组而不是字符串,需要使用strcmp进行字符串比较

你可以这样做

if(strcmp(membarname, Westley))

或者如果可能,您可以使用std::string代替char[]来存储字符串,然后您可以使用==运算符

您可以使用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){

        ....
    }
    ....
}

答案 3 :(得分:2)

而不是字符数组char[];使用std::string,您将获得所需的结果。

if (membername == Westley)

因为,对于char[]数据,上述比较会导致地址比较而非内容比较

答案 4 :(得分:1)

由于它是您正在使用的阵列,因此您需要使用strmcp,例如

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

因为您正在使用C ++而是使用string:

#include <string>

using namespace std;

string Westley = "Westley";

... 那么你可以做到

if (membername == Westley) ...

答案 5 :(得分:0)

首先,如果您使用C ++进行编码,则应使用std::string而不是char []。它可以方便地比较两个字符串(唉char []你需要调用strcmp之类的函数。)

例如:

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

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

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

答案 6 :(得分:0)

您正在使用的==运算符会比较字符串的地址。要比较两个C字符串,请使用strcmp<cstring>)中的string.h函数。在C ++中,您应该使用std::string类模板,可以使用==运算符直观地进行比较。

答案 7 :(得分:0)

if (membername == Westley)

只比较两个指针的值。