我正在尝试在二维数组中搜索字符串。
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数组而不是字符串时,它就消失了。所以,我认为它与此有关,但我不知道如何比较输入的名称和数组以找到匹配。
答案 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内存管理,标准算法,实用方法等等)。