为什么无法比较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;
}
答案 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)