为什么不能在if条件下比较两个字符串?

时间:2015-11-03 00:44:01

标签: c++

为什么无法比较if条件下的两个字符串?

#include <iostream>
#include <string.h>

using namespace std;

int main() {
  string  sexo[20], feminino; 
  feminino = "f";

  for (int i = 0; i < 3; i++) {  
    do {
      cout << endl << "enter your " << i + 1 << "sexo: ";
      cin >> sexo[i];

      if (strcmp(sexo[i], feminino)==0){ // problem in here     
        cout << "that's ok" << endl;
      }

    } while (nome[i] == "0");
  }
  return 0;
}

3 个答案:

答案 0 :(得分:10)

你一直在阅读C语言的“教程”,或者是C ++的“教程”,它们实际上教你C和C ++的可怕和过时的混合。

函数strcmp来自C标准库,不适用于C ++ std::string类型。

要比较两个std::string,只需写下:

if (sexo[i] == feminino) {

我发现很难相信你的C ++书并没有教你这个。

答案 1 :(得分:7)

这些是比较这些字符串的几种正确方法(按优先顺序相反)

if (strcmp(sexo[i].c_str(), feminino.c_str()) == 0) {

if (sexo[i].compare(feminino)) == 0) {

if (sexo[i] == feminino) {

答案 2 :(得分:0)

您使用的是错误的比较功能。您正在使用的内容与char *一起使用(在C中使用),但您在此std::string,因此您必须使用std::string::compare() 将您的代码更改为:

#include <iostream>
#include <string.h>

using namespace std;

int main() {


   string  sexo[20], feminino; // problem in here

   feminino = "f";

   for (int i = 0; i < 3; i++) {

      do {
          cout << endl << "enter your " << i + 1 << "sexo: ";
          cin >> sexo[i];

          if (sexo[i].compare(feminito) == 0){
             cout << "that's ok" << endl;
          }

      } while (nome[i] == "0");
   }


return 0;

请注意,您也可以使用sexo[i] == feminito作为std::string的关系运算符(有关示例,请参阅here