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

时间:2012-12-09 20:23:43

标签: c++ visual-c++

我已经思考了很长时间并没有参与该计划。我不知道从哪里开始。赋值需要使用单个函数main,并且只使用iostream库。 任务是声明一个包含10个元素的char数组。从用户那里获取输入。确定数组是否包含任何超过1次的值。不显示仅出现一次的字符。

Sample output:
a 2
b 4
..

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

我尝试使用嵌套循环来比较一个字符与数组中的所有字符,并在每次similer character id声音时递增一个计数器,但是会出现意外的结果。

这是代码

#include <iostream>
using namespace std;
void main()
{

    char ara[10];
    int counter=0;
    cout<<"Enter 10 characters in an array\n";
    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;
               }
     }
    }
}

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

以下是一种可以解决此问题的方法。我没有给你完整的代码;仅仅为其他人的家庭作业提供全面实施被认为是不好的。

首先,填充一个只包含唯一字符的新数组。例如,如果输入为:

abacdadeff

新阵列应该只有:

abcdef

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

然后创建一个新的int(或unsigned数组,因为你不能出现负数)保存原始输入数组中唯一数组中每个字符出现频率的值。每个值最初应为1.您可以使用以下声明来实现此目的:

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

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

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

你已经完成了。您现在可以告诉每个字符在输入中出现的次数。

答案 2 :(得分:0)

在这里,我会告诉你应该做什么,然后自己编写代码:

  

包含标题(stdio libs)

     

定义main(应用的入口点)

     

声明输入数组A [amount_of_chars_in_your_input]

     

写输出请求用户输入

     

收集输入

     

现在主要部分:

     

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

     

声明计数器int i = 0

     

声明计数器int j = 0

     

循环遍历数组A [](换句话说,i&lt; sizeof(A);或者[i]!='\ 0')

     

现在循环,就像数组A中有不同的字母一样

     

将字母数量存储在B []

中      

打印出来

现在有一些技巧应用于此但你可以处理它

答案 3 :(得分:0)

试试这个:

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

算法:

  1. 打开文件/读一封信。
  2. 搜索新信件的letters数组。
  3. 如果新信件存在:为此增加频率槽 信:frequency[toupper(new_letter) - 'A']++;
  4. 如果缺少新信件,请添加到阵列并将频率设置为1.
  5. 处理完所有字母后,打印出频率数组: `cout&lt;&lt; 'A'+索引&lt;&lt; “:”&lt;&lt;频率[指数]&lt;&lt; ENDL;