c++ - 有没有办法计算字符串数组中每个元素的出现次数?
问题描述
我有以下代码完全符合我的要求。问题是我需要样本数组来比较字符串并保持计数。有没有办法在没有样本的情况下计算任何数组上每个字符串的出现次数?
对于更多的上下文,最初的问题是从.txt
包含车辆信息的文件中读取数据,例如:
Volkswagen Jetta
Ford Focus
Volkswagen Jetta
并统计每个品牌的车辆数量。请记住,这是来自编程入门课程,我们不知道如何使用向量或地图。
#include <iostream>
#include <string>
using namespace std;
using std::string;
#define MAX 20
int main(){
int counter[MAX];
string arr[MAX]={"ABC","AOE","ADC","ABC","ADC","ADC"};
string sample[MAX]={"ABC", "AOE", "ADC"};
for(int i=0; i<=MAX; i++){
counter[i]=0;
}
for(int i=0; i<MAX;i++){
for(int j=0; j<MAX; j++){
if (sample[i]==arr[j]){
counter[i]++;
}
}
}
for(int i=0; i<3;i++){
cout<< sample[i] << "=" << counter[i]<<endl;
}
return 0;
}
解决方案
如果你想在不知道sample
数组初始值的情况下解决这个问题:
创建一个空sample
数组。当您看到新元素时,将它们添加到此数组中。
使用变量sample_size
来跟踪sample
已经看到了多少 s。下面是一个不使用std::vector
或不使用动态分配的简单示例。
int main()
{
std::string arr[MAX] = { "ABC","AOE","ADC","ABC","ADC","ADC" };
std::string sample[MAX];
int sample_size = 0;
int counter[MAX] = { 0 };
for (int i = 0; i < MAX; i++)
{
if (arr[i].empty()) break;
bool sample_found = false;
for (int j = 0; j < sample_size; j++)
if (arr[i] == sample[j])
{
sample_found = true;
counter[j]++;
break;
}
if (!sample_found)
{
sample[sample_size] = arr[i];
counter[sample_size]++;
sample_size++;
}
}
for (int i = 0; i < sample_size; i++)
cout << sample[i] << "=" << counter[i] << std::endl;
return 0;
}
推荐阅读
- oracle - 在 Oracle 中使用 Pivot 将行转换为列
- python - 尝试编写调查代码我不知道如何使减法起作用
- python - Selenium WebDriver css selector
- flutter - 如何在 Flutter / Dart 的下一个屏幕上显示小吃栏消息?
- php - 在 woocommerce 电子邮件模板中,如何检查用户是否是批发客户?
- reactjs - 在 React 中为传递的 props 组件添加 className 属性
- google-sheets - Arrayformula 正在覆盖后续行的结果,而不是填充它们自己的值
- huggingface-transformers - 为 QuestionAndAnswer 微调 HuggingFace Distilbert 模型时出错
- python - 无法将 GOOGLE CLOUD 中的 blob 从一个存储桶复制到另一个存储桶,请在下面找到代码
- php - 使用 Sail 清除安装后 Laravel Dusk Connection 被拒绝