0

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

二维数组包含姓名和生日。

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

当我尝试使用 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 数组而不是字符串时,它就消失了。所以,我认为这与此有关,但我不知道如何将输入的名称与数组进行比较以找到匹配项。

4

3 回答 3

1

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

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

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

或者你可以制作一个并string使用nameoperator==

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

顺便说一句,这个:

char name[100];
cin >> name;

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

于 2013-10-20T17:00:22.260 回答
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;
}
}
于 2013-10-20T17:00:30.620 回答
1

问题是您已将您的课程定义为“字符串”类型,但正在像“char *”一样访问它们(或者在您的情况下是“char []”,这几乎是同一件事)。您需要做的就是更改这一行:

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

对此:

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

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

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

于 2013-10-20T17:02:54.207 回答