计算字符串 c++ 中字符的出现次数
Count occurrences of character in string c++?
输入第一个字符串: 罗纳德·麦克唐纳德
输入第二个字符串: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;
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数