【问题标题】:Find how many times a string appears in another? (C++) [closed]求一个字符串在另一个字符串中出现多少次? (C++)[关闭]
【发布时间】:2013-02-11 03:51:30
【问题描述】:

如何找出一个字符串在另一个字符串中出现的次数?

例如,如果我输入两个字符串: 消息misHdeOJfsfsOJdosIhisdaIhfidfgOJsde

所以,它出现一次,因此输出应该是 YES。

它也必须区分大小写,例如: CaseSensitive 区分大小写应该输出“NO”,因为它没有出现。

#include <iostream>
using namespace std;
int main()
{

    string a[100],b[100];
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> a[i] >> b[i];
    }
    for(int j=0;j<n;j++)
    {
        if(a[j].find(b[j]))
        cout << "YES" << endl;
        else
        cout << "NO" << endl;
    }
    return 0;
}

谢谢。

【问题讨论】:

  • 你试过什么,有什么作用,没有什么作用......(等等,等等,等等)
  • 在带有计数器的 while 循环中使用 std::string::find 来跟踪
  • 更新了我到目前为止的内容。我几乎被困住了......有什么帮助吗?
  • 好多了,请注意求解器,他的“查找”字符串是嵌入的,在他的“查找”字符串中一次一个字符
  • 如果数字>100,我猜程序会溢出。无论如何,我正在做的挑战说 1

标签: c++ arrays string


【解决方案1】:

string::find 如果没有找到则返回string::npos(不是0),如果找到则返回起始位置,所以你的条件if(a[j].find(b[j])) 是错误的。

阅读a reference manual,了解如何正确使用find。

(find 只会在搜索字符串出现在一个片段中时才找到它,即它在 'message' 中找到 'esag' 而在 'abaeaear' 中找不到 'beer' !后者需要更多考虑,如果那是任务,那么您可能应该想出自己的算法。)

【讨论】:

  • 这不是家庭作业,我在 spoj.com 上挑战。
  • 这是我的代码:#include &lt;iostream&gt; using namespace std; int main() { string a[100],b[100]; int n; cin &gt;&gt; n; string::size_type m; for(int i=0;i&lt;n;i++) { cin &gt;&gt; a[i] &gt;&gt; b[i]; } for(int j=0;j&lt;n;j++) { m=a.find(b[j]); cout &lt;&lt; m &lt;&lt; "YES" &lt;&lt; endl; } return 0; } 行“m=a.find(b[j]);”出现错误说“在'a'中请求成员'find',它是非类类型'std :: string [100]”
【解决方案2】:

你可以试试这样的:

int find_n_substr( const string& s, const string& key){

    int n = 0;
    string::size_type sz = 0;

    while ( (sz = s.find (key,sz) ) != string::npos  ){
        sz++; /*otherwise you start searching at your previous match*/
        n++;
    }
    return n;
}

【讨论】:

  • 是的,但这仅在 EXACT 单词存在时才有效...我也需要在其他单词之间查找,例如在 kaeaya 之间查找键。
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2021-10-28
  • 1970-01-01
  • 2013-11-19
相关资源
最近更新 更多