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