C ++ 2d数组搜索错误

时间:2013-10-20 16:53:54

标签: c++ arrays multidimensional-array intellisense strcmp

我正在尝试在二维数组中搜索字符串。

2d数组包含姓名和生日。

我想搜索一个名字并显示他们的生日。

当我尝试使用strcmp查看输入的名称是否与数组中的任何名称相比时,我收到此错误:

    IntelliSense: no suitable conversion function from "std::string" to "const char *" exists

以下是我的代码:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int main()
{

char name[100];

string firstnames[2][4]= { {"John", "Emily", "Juan", "Sally"},
{"Nov 6", "Jan 13", "Oct 10", "Mar 29"} };

cout << "Enter a name: \n";
cin >> name; 

if (strcmp(name, firstnames[0][0]) == 0)
{

}
}

我不明白如何修复此错误?我有另一个类似的错误,但当我将名称更改为char数组而不是字符串时,它就消失了。所以,我认为它与此有关,但我不知道如何比较输入的名称和数组以找到匹配。

3 个答案:

答案 0 :(得分:1)

strcmp函数采用类型为const char*的2个参数。虽然const char*可以隐式转换为std::string,但事实并非相反。

您可以通过char成员函数获取指向内部c_str数组的指针:

strcmp(name, firstnames[0][0].c_str());

或者您可以string制作name并使用operator==

if (std::string(name) == firstnames[0][0]) // ...

顺便说一下,这个:

char name[100];
cin >> name;

非常容易受到缓冲区溢出的影响。如果用户输入超过100个字符怎么办? 我建议您从一开始就使用std::string

答案 1 :(得分:1)

由于您已经在使用字符串类,为什么不将name作为字符串对象

#include <iostream>
#include <string>
using namespace std;

int main()
{

string name;

string courses[2][4]= { {"John", "Emily", "Juan", "Sally"},
{"Nov 6", "Jan 13", "Oct 10", "Mar 29"} };

cout << "Enter a course name: \n";
cin >> name; 

if (name == courses[0][0])
{
    cout << "Done!" << endl;
}
}

答案 2 :(得分:1)

问题是你已经将你的课程定义为“string”类型,但是像“char *”一样访问它们(或者在你的情况下“char []”这几乎是一样的)。您需要做的就是改变这一行:

if (strcmp(name, courses[0][0]) == 0)

到此:

if (strcmp(name, courses[0][0].c_str()) == 0)

请注意“c_str()”。这只是返回字符串的char *指针,可以在strcmp()中使用。

作为一个:你有没有特别的原因从使用std :: string到char *?我问的原因是因为char *更像是一种C风格的编程方式。 std:string类型是为C ++设计的,包含其他字符串的内置比较运算符(我相信甚至是char *)。通常在使用C ++编程时,最好尽可能使用C ++样式类型,因为它有很多优点(RAII内存管理,标准算法,实用方法等等)。