比较C ++中的许多char变量

时间:2013-12-07 17:03:14

标签: c++ vector char

我是初学程序员,我很困惑。我如何比较许多char变量? 所以,我在 .in 文件中有这样的样子:

  

n(无符号变量,如7,有多少char掉下来)
  A B C C B D B

.out 文件中的

我必须重复哪些字符以及重复的次数:

  

B 3
  C 2

我该怎么做?请帮我。我想我可以用代替和矢量......但是怎么样? 我尝试了一些东西,但我不知道如何继续:(( litera 意思是字符

unsigned n,i;
char litera;
f>>n;
for (i=1;i<=n;i++)
    f>>litera;

return 0;

4 个答案:

答案 0 :(得分:1)

更简单的方法是使用std::map< char, int>来存储每个字符的数量。

unsigned n,i;
f>>n;
char ch;
std::map< char, int > myMap;
for (i=1;i<=n;i++) {
    f>>ch;
    if ( myMap[ch] )
      myMap[ch]++;
    else 
      myMap[ch] = 1;
}

否则使用char的向量。

unsigned n,i;
f>>n;
vector<char> litera( n );
for (i=1;i<=n;i++)
    f>>litera[i];

为计算重复次数,有很多方法。

您可以先对矢量进行排序并迭代元素。

std::sort( litera.begin(), litera.end() );

int count = 1;
for ( int i = 0; i < litera.size(); i++ ) {
  if ( litera[i] == litera[i+1] ) 
    count++;
  else if ( count > 1 ) {
    std::cout << litera[i] << count << std:endl;
    count = 0;
  }
}

答案 1 :(得分:1)

由于可能的字符数量非常有限(256),您可以定义一个大小为255的数组,它表示每个字符存在多少个实例。

首先归零这样的数组。然后迭代输入字符并递增您看到的每个单元格。最后将所有非零元素打印到输出文件。

答案 2 :(得分:1)

使用计数数组:

int array[256] = {};
unsigned int n,i;
char tmp;
f>>n;
for (i=1;i<=n;i++)
    f>>tmp;
    array[tmp] ++;

之后,您只需将数组中所有非零值的值打印到文件中即可。

答案 3 :(得分:0)

我不会写完整篇文章,因为我猜你需要/想要学习C ++,最好自己动手做。不过这是个主意。

假设您只读取ASCII字符(因为您使用的是char),我会声明一个静态数组:

int counts[256] ;

然后用零填充它

您可以使用memsetfor循环来执行此操作。

接下来,当您阅读字符时,您会增加counts数组的特定单元格,如下所示:

counts[litera]++ ;

最后,当你完成阅读时,循环遍历数组并打印出counts数组中的字母和相应的数字:

for ( int i = 0 ; i < 256 ; i++ )
    if ( counts[ i ] != 0 )
        std::cout << static_cast< char >( i ) << " " << counts[ i ] << "\n" ;

我希望它会有所帮助。