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-8787されます。Ron 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。この関数は、検索された文字列で検索された文字列の開始位置を返します。一致するものが見つからなかった場合は、nposwitchが実際にはちょうどであることが返されます-1

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

A4Lですでに述べたように、findを使用する必要があります。悪い値が入力された場合、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つの要素を含むように初期化され、4つの値、、、およびが与えpidgeonられます。文字列配列内の要素の数を表すsizeと呼ばれるint変数が作成されます。文字列'bc'を含むmatchStringという文字列変数が作成されます。abcd1234%^&#

forループのインデックスは、位置0から始まり、配列のサイズより1つ小さくなるまで1ずつ増加します。したがって、forループは0、1、2、3を通過します。xの最初の値は0です。ifステートメントはdata[0]をpidgeonに解決します。その文字列に対してfindメソッドが適用され、2つのパラメーターが渡されます。照合する文字列と、検索で考慮される文字列の最初の文字の位置(0)。

'bc'が'pidgeon'内に存在する場合は、最初の一致の最初の文字の位置を返します。それ以外の場合は、サイズが見つからないことを示すsize_tの最大値であるstd :: string:nposを出力します。

bcはpidgeonに存在しないため、forループの内部をスキップします。forループは位置1のインデックスを作成し続けます。bcはabcdに含まれています。その文字列が印刷されます。すべての項目が検索されると、forループが終了し、プログラムが完了します。

于 2014-06-05T21:18:08.937 に答える