C ++使用find(str,index)计算字符串中char的出现次数

时间:2012-01-15 14:11:14

标签: c++ string count find

这实际上是我的作业,问题是:

  

“程序应确定角色的次数   包含在字符串中。 (提示:使用。搜索字符串   find(str,ƒind)方法。这个方法应该在循环中使用   将索引值设置为0,然后将索引值更改为1   上次找到char的索引。)“

这是我想出来的,但它所做的只是计算字符串中有多少个字符。 C ++的新手,所以我希望你们能耐心等待我。

#include <string>
#include <iostream>
using namespace std;

int main()
{
    string s;
    char c;
    size_t contain;
    int count = 0;
    cout << "Enter a string : ";
    getline(cin, s);
    cout <<"Enter a char : ";
    cin >> c;
    for(int i = 0; i < s.length(); i++)
    {
        contain = s.find(c, i);
        if (contain =! string::npos )
        {
            count++;
        }
    }
    cout << count <<endl;
    return 0;
}

4 个答案:

答案 0 :(得分:4)

此:

(contain =! string::npos)
         ^^

不符合您的想法。看看http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

另外,这个:

contain = s.find(c, i);

没有做任何特别有用的事情(如果你所做的只是每次迭代都递增i)。你最终会多次计算一些事件。

[ 注意: 您可以使用count = std::count(s.begin(), s.end(), c)更清晰地解决实际任务。]

答案 1 :(得分:4)

您可以做到:


而不是

contain = s.find(c, i);
if (contain =! string::npos )
    {
        count++;
    }

if(s[i] == c) 
{
   count++;
}

也可以使用此功能。

#include <algorithm>
int count = std::count(s.begin(), s.end(), c);
cout<<count;

答案 2 :(得分:3)

我认为@ parapura的代码看起来很不错:

while((size_t contain = s.find(c,i)) != string::npos){
    count++;
    i = contain + 1;
}

它可以很好地解决问题; - )

答案 3 :(得分:0)

我认为根据你的问题陈述。

  

将索引值更改为1,超过上次找到char的索引

你的while循环应该是

while( 1 )
{
    contain = s.find(c, i);
    if (contain != string::npos )
    {
        count++;
        i = contain + 1;
    }
    else
    {
        break;
    }
}