0

文字列クラスのfindメソッドを使用すると、クエリで正しい結果が得られません。これが私のコードです

int main()
{
    string phoneData;
    string name;
    string phoneNumbers[51];
    ifstream inputFile;
    inputFile.open("phonebook");
    int i = 0;
    while (getline(inputFile, phoneData))
    {
        phoneNumbers[i] = phoneData;
        i++;
    }
    cout << "Enter a name or partial name to search for: ";
    getline(cin, name);
    cout << endl << "Here are the results of the search: " << endl;

    for(int i =0;i<50;i++)
    {
        if (name.find(phoneNumbers[i]) == 0)
            cout << phoneNumbers[i] << endl;
    }
    inputFile.close();
    return 0;
}
4

2 に答える 2

3

あなたはそれを正しく使用していません。string::find() は、一致が見つかった場合は開始位置を返し、一致が見つからない場合は string::npos を返します。後方検索もあります。「phoneNumbers[i]」内の「名前」を探していますが、その逆ではありません。ループ内のチェックは次のようになります。

if (phoneNumbers[i].find(name) != string::npos)
    cout << phoneNumbers[i] << endl;
于 2012-12-13T18:00:47.950 に答える
1

変化する

if (name.find(phoneNumbers[i]) == 0)

if (phoneNumbers[i].find(name) != std::string::npos)

前者は name 内で phoneNumbers[i] を見つけようとしています。2番目(あなたが意図したものだと思います)は、phoneNumbers [i]内で名前を検索しています。第 2 に、 の失敗の戻り値はゼロでstd::string::findはありません。std::string::npos

于 2012-12-13T18:01:32.950 に答える