计算字符串 C++ 中字符的出现次数?

Count occurrences of character in string c++?

输入第一个字符串:ronnald macdonnald

输入第二个字符串:a

输出:3

输入第一个字符串:ronnald macdonnald

输入第二个字符串:nn

输出:2

#include<iostream> 
#include<conio.h> 
using namespace std; 

int main() 
{ 
char a[100]; 
char b; 
int count = 0; 

cout << "Enter 1st String: "; 
cin.getline(a,100); 
cout << "Enter 2nd String: "; 
cin >> b; 

for(int i=0;i<strlen(a);i++) 
{ 
if(a[i] == b) 
{ 
count++; 
} 

} 
cout << "Output: " << count; 

getch(); 
return 0; 
} 

但是在我的代码中:

输入第一个字符串:ronnald macdonnald

输入第二个字符串:nn

输出:4

输出应该是2

您可以使用 std::count(但正如 Andy Prowl 所注意到的,只有当您检查单个字符时):

std::string str("ronnald macdonald");
std::cout << std::count(str.begin(), str.end(), 'a');  //3

如果您正在检查子字符串,您可以使用正则表达式令牌迭代器:

std::string str("Ronnald Macdonnald");

std::regex reg("nn");

std::sregex_token_iterator iter(str.begin(), str.end(), reg, 0);
std::sregex_token_iterator end;

std::vector<string> vec(iter, end);
std::cout << "Occurences: " << vec.size() << std::endl;

您将第二个字符串 b 声明为 char b;,意思是 一个字母 。无法将搜索字符串 "nn"(2 个字母)存储在单个字符位置。

因此,您需要重新设计一些程序。

您的代码在应该计算子字符串的时候计算字符,例如:

#include <iostream> 
#include <string>
#include <conio.h> 

int main() 
{ 
    std::string a, b; 
    int count = 0; 

    std::cout << "Enter 1st String: "; 
    std::getline(std::cin, a); 
    std::cout << "Enter 2nd String: "; 
    std::getline(std::cin, b);

    std::string::size_type i = a.find(b);
    while (i != std::string::npos)
    {
        ++count;
        i = a.find(b, i+b.length());
    } 

    std::cout << "Output: " << count; 

    getch(); 
    return 0; 
}