2015-04-05 106 views
-2

比方说,我有一个名为info的字符串矢量,它依次从文件中逐一读取网站的名称。在C++中部分字符串搜索

这是我有一个搜索的名称,只完整名称:

int linearSearch(vector <string> inputs, string search_key){ 
    for (int x=0; x<inputs.size(); x++){ 

     if (search_key==inputs[x]){ 

      return x; 
     } 
    } 
    return -1; 
} 

现在,如果我想在这一个特定的词来统计网站的数量呢?

所以,如果我有

  1. apple.com
  2. mac.com
  3. macapple.com
  4. applepie.com
  5. potato.com

和我搜索对于“苹果”,它会返回3.

+0

哦,对不起,我想知道如何修改这个来计算文件不是完美匹配,而是通过部分匹配。即计数在其中有一个短语,如“苹果”的网站的数量, – 2015-04-05 20:40:17

回答

0

您可以使用string::find执行字符串的部分搜索并将该值存储到变量size_t中。

将其与std::string::npos进行比较,如果不相等则与递增计数相加。

这里是一个简单的例子,使用数组而不是矢量,所以你可以根据需要学习和修改。

int main() { 

    string inputs[2] = {"stack overflow", "stack exchange"}; 
    string search_key = "stack"; 
    int count; 

    for(int i = 0; i <sizeof(inputs)/sizeof(inputs[0]); i++) 
    { 
     //npos returns -1. If substring is not found, find will return -1. 
     //if substring is found, condition fails and count is incremented 
     if (inputs[i].find(search_key) != string::npos) 
      count++; 
    } 

    cout << count; 

    return 0; 
} 

Here是以上代码的链接。您可以看到输出为2,因为inputs数组中出现了两次stack

+0

谢谢一堆,虐待尝试 – 2015-04-05 21:23:45