我一直在关注这个论坛一段时间,但现在正式注册了。 我是一个现在学习C++的Java人。帮我把这个Java函数转换成C++
作为练习,我开始用C++重写一些我编写的Java代码(当我正在学习它时)。
有几个问题在这里帮了我很多。但我现在卡住了,需要一些帮助。
我试图解决的问题是计算数组中的最大重复字符数。这个想法是保留一个大小为26的数组作为频率数组,arr [0]是'a',arr [1]是'b'等等。为输入数组中的每个字符增加合适的位置,并最终找到最大数量的索引。
这是我的Java功能:
static char findMax(String str) {
int arr[] = new int[26];
int i;
for(i=0;i<str.length();i++)
arr[str.charAt(i) - 'a']++;
int maxFreq = arr[0];
int maxEleIndex = 0;
for(i=1;i<26;i++)
if(arr[i] > maxFreq) {
maxFreq = arr[i];
maxEleIndex = i;
}
return (char)(maxEleIndex + 'a');
}
这是我的C++函数:
char findMax(string str) {
int *arr = new int[26];
int i;
for(i=0;i<str.length();i++)
arr[str.at(i) - 'a']++;
int maxFreq = arr[0];
int maxEleIndex = 0;
for(i=1;i<26;i++)
if(arr[i] > maxFreq) {
maxFreq = arr[i];
maxEleIndex = i;
}
return (char)(maxEleIndex + 'a');
}
代码编译罚款,但没有给出正确的输出,它会报告不正确的字符为最大重复。我用指针代替引用,在函数中代替charAt。我究竟做错了什么?
或者,由于'arr'具有固定的大小,使用'INT ARR [26] = {0};' – 2010-10-11 06:21:32
@larsmans:正要添加:) – codaddict 2010-10-11 06:22:28
1对未指出到删除分配的数组。当我从C++转移到Java时,GC是一种解脱。我想到有人试图走向另一个方向...... – 2010-10-11 06:31:21