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] 中寻找 'name',而不是相反。您在循环内的检查应如下所示:

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)

前者试图在名称中找到 phoneNumbers[i]。第二个(我相信这是您想要的)是在 phoneNumbers[i] 中搜索名称。第二,失败返回std::string::findstd::string::npos为零。

于 2012-12-13T18:01:32.950 回答