我是初学程序员,我很困惑。我如何比较许多char变量? 所以,我在 .in 文件中有这样的样子:
.out 文件中的n(无符号变量,如7,有多少char掉下来)
A B C C B D B
我必须重复哪些字符以及重复的次数:
B 3
C 2
我该怎么做?请帮我。我想我可以用代替和矢量......但是怎么样? 我尝试了一些东西,但我不知道如何继续:(( litera 意思是字符)
unsigned n,i;
char litera;
f>>n;
for (i=1;i<=n;i++)
f>>litera;
return 0;
答案 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] ;
然后用零填充它
您可以使用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" ;
我希望它会有所帮助。