这实际上是我的作业,问题是:
“程序应确定角色的次数 包含在字符串中。 (提示:使用。搜索字符串 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;
}
答案 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;
}
}