C ++:检查字符串向量是否具有特定字符串

时间:2018-01-08 05:12:48

标签: c++ string c++11 vector c++14

假设我有一个32000个元素的字符串向量table

我想使用if循环来检查向量是否有(甚至是字符串的子串)。

假设table的前三个元素是

table[0]="starved monster"
table[1]="rabid mosquito"
table[2]="drunk ghost"
// ...

我想迭代整个向量来检查它是否有子字符串s="gho";

从这里开始,我想实现一个代码:

  

是的,子串就在那里,它在索引= 2。

3 个答案:

答案 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;
}