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

Count occurrences of character in string c++?

本文关键字:字符 字符串 c++ 计算      更新时间:2023-10-16

输入第一个字符串: 罗纳德·麦克唐纳德

输入第二个字符串:a

输出: 3

输入第一弦:罗纳德·麦克唐纳

输入第二个字符串: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; 
} 

但是在我的代码中:

输入第一弦:罗纳德·麦克唐纳

输入第二个字符串:nn

输出: 4

输出应为 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; 
} 

你声明了第二个字符串 b 作为 char b; ,意思是一个字母。 无法将搜索字符串"nn"(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;