我希望能够在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 ++中搜索字符串数组?
答案 0 :(得分:1)
您必须使用std::string
的{{3}}方法。此函数返回在搜索到的字符串中搜索的字符串的开始位置。如果未找到匹配项,则返回find女巫实际上只是-1
。
if(data[i].find(search, 0) != std::string::npos);
{
cout << data[i]<< endl;
}
答案 1 :(得分:1)
你应该使用find,就像已经提到的A4L一样。我只想补充一点,如果输入了错误的值,你对cin.ignore的使用将无法正常工作。你需要
cin.clear()
也。有关详细信息,请参阅this link。
答案 2 :(得分: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个元素,并给出了四个值pidgeon
,abcd
,1234
和%^&#
。创建一个名为size的int变量,它表示字符串数组中的元素数。创建一个名为matchString的字符串变量,其中包含字符串'bc'。
for循环索引从位置0开始并递增1,直到它达到小于数组大小的值。因此for循环遍历:0,1,2,3.x的第一个值是0. if语句将data [0]解析为pidgeon。对该字符串应用find方法,并传入两个参数。要匹配的字符串,以及要在搜索(0)中考虑的字符串中第一个字符的位置。
如果'pidgeon'中存在'bc',那么它将返回第一个匹配的第一个字符的位置,否则它将打印std :: string:npos,这是size_t指定未找到的最大值。
pidge中不存在bc因此它会跳过for循环的内部。 for循环继续索引位置1.bc包含在abcd中。这样打印出字符串。搜索完所有项目后,for循环结束,程序完成。