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

Compare many char variables in C++

本文关键字:char 变量 许多 C++ 比较      更新时间:2023-10-16

我是一个初学者,我很自信。如何比较多个字符变量?所以,我在./em>文件中有这样的smt:

n(一个无符号变量,如7,有多少个字符)
A B C C B D B

.out文件中,我必须有哪些字符重复以及重复频率:

B3
c2

我该怎么做?请帮帮我。我想我可以用来表示和向量。。。但是怎么做呢
我尝试了一些东西,但我不知道如何继续:(文字意味着字符

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

使用计数数组:

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

之后,您可以将数组中所有不为零的值打印到文件中。

更简单的方法是使用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;
  }
}

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

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

我不会写全部内容,因为我想你需要/想要学习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" ;

我希望这会有所帮助。