比较C++中的许多char变量
Compare many char variables in C++
我是一个初学者,我很自信。如何比较多个字符变量?所以,我在./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] ;
然后最初用零填充
您可以使用memset
或for
循环来执行此操作。
接下来,当您读取字符时,您会增加counts
数组的特定单元格,如下所示:
counts[litera]++ ;
最后,当你完成阅读时,循环浏览数组,并从counts
数组中打印出字母和相应的数字:
for ( int i = 0 ; i < 256 ; i++ )
if ( counts[ i ] != 0 )
std::cout << static_cast< char >( i ) << " " << counts[ i ] << "n" ;
我希望这会有所帮助。
相关文章:
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 如何更好地检查两个 char 变量是否在一组值中?
- 将双精度值转换为 char 变量时字符串流如何工作
- C++ 如何检查 char 变量是否未定义(未初始化)
- 在 c++ 中将 Char 数组添加到 Char * 变量
- char指针或char变量的默认值是多少
- 当对字符变量使用toupper()时,所述char变量输出多个字符.我该如何防止这种情况发生
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 程序的执行在 C++ 中输入 char 变量后结束
- 如何创建一个 char *[] 变量,以便将其传递给函数
- 将 2 位整数分配给 char 变量
- 将值设置为 char ** 变量 c++ 时出错
- 如果我们在 C++ 中声明一个起始'&'的 char 变量会发生什么?
- 在此范围C 中未声明字符串和char变量
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 仅将输入的第一个字符用于 char 变量
- 在C 中使用两个CHAR变量评估布尔值
- 尚未声明char变量
- (C++)如何验证 char 变量的用户输入
- 为什么比较两次 char 变量比比较一次短变量更快