假设我有一个32000个元素的字符串向量table
。
我想使用if
循环来检查向量是否有(甚至是字符串的子串)。
假设table
的前三个元素是
table[0]="starved monster"
table[1]="rabid mosquito"
table[2]="drunk ghost"
// ...
我想迭代整个向量来检查它是否有子字符串s="gho"
;
从这里开始,我想实现一个代码:
是的,子串就在那里,它在索引= 2。
答案 0 :(得分:1)
您可以简单地遍历向量并使用std:string::find方法查找字符串。
这是一个简单的例子:
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
const vector<string> table { "hello", "hi", "bye", "see you" };
const string str_to_find { "you" };
for ( size_t i = 0; i < table.size(); ++i )
{
if ( table[i].find( str_to_find ) != string::npos )
{
cout << "Found " << quoted( str_to_find )
<< " in " << quoted( table[i] )
<< " at index " << i << '\n';
break;
}
}
return 0;
}
输出:
在索引3“见到你”中找到“你”
您可能希望为此编写一个简单的方法,它会将true
/ false
与索引一起正确返回(成功时为有效索引,否则为-1)。
答案 1 :(得分:1)
您可以使用std::find_if()
,例如:
std::string toFind = ...;
auto iter = std::find_if(
table.begin(),
table.end(),
[&](const std::string &str){ return str.find(toFind) != std::string::npos; }
);
if (iter != table.end())
{
auto index = std::distance(table.begin(), iter);
...
}
答案 2 :(得分:0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> table;
table.push_back("starved monster");
table.push_back("rabid mosquito");
table.push_back("drunk ghost");
//entries for rest of the table
string toFind = "ghost";
for (int ii = 0; ii < table.size(); ++ii){
if (table[ii].find(toFind) != string::npos) {
cout << "Yes the substring is here and it is at index " << ii << endl;
}
}
return 0;
}