计算一个字符在数组中出现的次数

count number of times a character appears in an array?

本文关键字:数组 字符 一个 计算      更新时间:2023-10-16

我已经思考了很长时间,对这个程序没有任何进展。我不知道从哪里开始。该赋值要求使用单个函数main,并且只能使用iostream库。任务是声明一个由10个元素组成的char数组。接受用户的输入。确定数组是否包含超过1次的任何值。不要显示仅出现1次的字符。

Sample output:
a 2
b 4
..

a和b是字符。2和4表示它们在阵列B中出现的次数。

我尝试使用嵌套循环将一个字符与数组中的所有字符进行比较,并在每次发出类似字符id时递增计数器,但出现了意想不到的结果。

这是代码

#include <iostream>
using namespace std;
void main()
{
char ara[10];
int counter=0;
cout<<"Enter 10 characters in an arrayn";
for ( int a=0; a<10; a++)
cin>>ara[a];
for(int i=0;  i<10;  i++)
{
for(int j=i+1; j<10;  j++)
{
if(ara[i] == ara[j])
{
counter++;
cout<<ara[i]<<"t"<<counter<<endl;
}
}
}
}

算法2:std::map
声明/定义容器:

std::map<char, unsigned int> frequency;
  1. 打开文件
  2. 读一封信
  3. 查找字母:frequency.find(letter)
  4. 如果存在字母,则增加频率:frequency[letter]++
  5. 如果字母不存在,插入频率:frequency[letter]=1
  6. 处理完所有字母后,在显示字母及其频率的map中迭代

以下是解决此问题的一种可能方法。我不会给你完整的代码;仅仅为别人的作业提供完整的实现被认为是不好的。

首先,只使用唯一字符填充新数组。例如,如果输入为:

abacdadeff

新阵列应该只有:

abcdef

也就是说,每个字符应该只出现一次。不要忘记-终止它,这样你就可以知道它的结束位置(因为它的长度可以小于10)。

然后创建一个新的int(或unsigned,因为不能出现负值)值数组,该数组保存原始输入数组中唯一数组中每个字符的出现频率。每个值最初都应该是1。您可以通过以下声明来实现这一点:

unsigned freq[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

现在,对唯一数组进行迭代,每次在原始输入数组中找到当前字符时,递增frequencies数组的相应元素。所以最后,对于上面的输入,你会得到:

a b c d e f (unique array)
3 1 1 2 1 2 (frequencies array)

你完了。现在,您可以判断每个字符在输入中出现的次数。

在这里,我将告诉您应该做什么,并由您自己编写代码:

include headers(stdio-libs)

定义主(应用程序的入口点)

声明输入数组A[amount_of_chars_in_your_input]

写入输出请求用户输入

收集输入

现在主要部分:

声明另一个无符号短路数组B[]

声明计数器int i=0

声明计数器int j=0

循环通过数组A[](换句话说,i<sizeof(A);或a[i]!='\0')

现在循环,只要数组中有不同的字母A

将字母数量存储在B[]中

打印出

现在有一些技巧可以应用,但你可以处理

试试这个:

unsigned int frequency[26] = {0};
char         letters[10];

算法:

  1. 打开文件/阅读信件
  2. 搜索新字母的letters数组
  3. 如果新字母存在:则增加该字母的频率槽信函:frequency[toupper(new_letter) - 'A']++;
  4. 如果缺少新字母,请将其添加到数组中,并将频率设置为1
  5. 处理完所有字母后,打印出频率阵列:`cout<lt;'A'+索引<lt;":"<lt;frequency[index]<lt;endl