0

我希望能够在 C++ 中搜索字符串数组。我有这个数据:

"Foo Becky, 924-334-2514", 
"Becky Warren, 555-1223", 
"Geri Palmer, 555-8787", 
"Ron Palmer, 555-2783"

如果用户键入Bec,程序会找到名称Foo Becky, 924-234-2314。如果用户键入Palmer,则程序应显示Geri Palmer, 555-8787Ron Palmer, 555-2783

这是我到目前为止所拥有的:

#include <iostream>
#include <string>
using namespace std;
int main(){
    int n;
    string search;

    while(1){
        cout << "How many data you want to input: "<< endl;
        cin >> n;
        cin.ignore(1000, 10);

        if(n > 0 && n < 20){
            break;
        }
        cout << "Number of data can not be negative or more than 20. "<< endl;
    }

    string* data = new string[n];

    for(int i=0; i< n; i++){
        cout << "Enter [First Name] [Last Name], [Phone-Number] and then hit "
             << "enter." << endl << "e.g: Foo Becky, 925-245-413"<< endl;
        getline(cin,data[i]);
        cout << endl;
    }

    cout << "Enter what you want to search for: "<< endl;
    getline(cin, search);

    for(int i =0; i< n; i++){
        if(search == data[i]){
            cout << data[i]<< endl;
        }
    }
    delete [] data;
    return 0;
}

如何在 C++ 中搜索字符串数组?

4

3 回答 3

1

你必须使用find的方法std::string。此函数返回在搜索的字符串中搜索的字符串的起始位置。如果未找到匹配项,则返回npos女巫实际上只是-1.

if(data[i].find(search, 0) != std::string::npos);
{
    cout << data[i]<< endl;
}
于 2013-03-25T02:44:54.873 回答
1

您应该使用 find,正如 A4L 已经提到的那样。我只想补充一点,如果输入错误值,您对 cin.ignore 的使用将无法正常工作。你需要

cin.clear() 

还。有关更多详细信息,请参阅此链接

于 2013-03-25T03:18:39.497 回答
0

如何在 C++ 中搜索字符串数组示例:

这是蛮力搜索方法。蛮力意味着我们逐步遍历整个字符串数组,并在数组的每个索引处搜索匹配的字符串。

#include<iostream>
#include<string>
using namespace std;
int main(){
    //Create a structure to hold the data:
    string data[] = {"pidgeon", "abcd", "1234", "%^*#"};

    //Get the length of the array.
    int size = 4;

    //loop through all the items and print them if they match
    string matchString = "bc";
    for(int x = 0; x < size; x++){
        if (data[x].find(matchString, 0) != std::string::npos){
            cout << data[x] << endl;
        }
    }
}

上面的代码打印:

abcd

您应该像这样在脑海中从上到下将上述代码表达出来:

一个名为 data 的字符串数组被初始化为包含 4 个元素并给定四个值pidgeonabcd和。创建了一个名为 size 的 int 变量,它表示字符串数组中的元素数。创建了一个名为 matchString 的字符串变量,其中包含字符串“bc”。1234%^&#

for 循环索引从位置 0 开始并以 1 递增,直到它比数组的大小小 1。所以for循环经过:0、1、2、3。x的第一个值是0。if语句将data[0]解析为pidgeon。对该字符串应用 find 方法并传入两个参数。要匹配的字符串,以及要在搜索中考虑的字符串中第一个字符的位置 (0)。

如果 'bc' 存在于 'pidgeon' 中,那么它将返回第一个匹配的第一个字符的位置,否则它将打印 std::string:npos 这是 size_t 指定未找到的最大值。

bc 在 pidgeon 中不存在,因此它跳过了 for 循环的内部。for 循环继续索引位置 1。bc 包含在 abcd 中。所以该字符串被打印出来。搜索完所有项目后,for 循环结束,程序完成。

于 2014-06-05T21:18:08.937 回答