0

文字列の 2 次元配列を検索しようとしています。

2 次元配列には、名前と誕生日が含まれています。

名前を検索して誕生日を表示したい。

入力された名前が配列内の名前と比較されるかどうかを確認するために 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)
{

}
}

このエラーを修正する方法がわかりませんか? 別の同様のエラーがありましたが、名前を文字列ではなく文字配列に変更すると消えました。それで、それと関係があると思いますが、入力された名前を配列と比較して一致を見つけるにはどうすればよいかわかりません。

4

3 に答える 3

1

strcmp関数は type の 2 つのパラメータを取りますconst char*const char*は暗黙的に に変換できstd::stringますが、その逆ではありません。

メンバー関数charによって内部配列へのポインターを取得できます。c_str

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

または、stringfromnameを作成して使用できますoperator==

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 に答える