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

时间:2015-01-04 23:39:37

标签: 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

3 个答案:

答案 0 :(得分:1)

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

#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; 
} 

答案 1 :(得分:0)

您可以使用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;

答案 2 :(得分:0)

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

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