2013-10-20 86 views
0

我想搜索一个字符串的二维数组。C++二维数组搜索错误

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

为什么不'std :: map'? – P0W

+0

我到那里有一个问题,但我不知道如何使这两个工作?我认为这个名字的数组需要是字符串,而且我在多个网站上看到它需要作为字符数组来比较......显然,有一些我已经错过了,并且没有接受它。 – user1368970

+0

我还没有使用std :: things,我在哪里包含它? – user1368970

回答

1

既然你已经使用String类,为什么不干脆让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; 
} 
} 
+0

工作正常!我的书显然在那里自相矛盾......大声笑......非常感谢! – user1368970

+0

我其实很同意你的回答。我张贴了我的原始代码,但我发现你的解决方案实际上更适合于正确的C++编程。 –

1

strcmp函数需要2个参数const char*。虽然const char*可以隐式转换为std::string,但并不是相反。

您可以通过c_str成员函数得到一个指向内部char阵列:

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

,或者你可以从name做出string和使用operator==

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

顺便说一句,这一点:

char name[100]; 
cin >> name; 

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

+0

好的!我想现在我明白我的书的意思了。它从来没有提到c_str(),但这完全奏效。大声笑。非常感谢。 – user1368970

1

的问题是,你定义了你的课程类型“串”但访问它们像“字符*“(或在你的情况下”字符[]“这是几乎相同的东西)。所有你需要做的就是改变这一行:

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内存管理,标准算法,实用程序方法等)。