首先做题时,遇到字符串数组的输出总是不对,排除代码逻辑的原因后发现,竟然是因为开的二维数组第二维设置小了,最后发现应该把第二维稍微开大些。
最终可运行的代码如下。
#include
int hashFunc(char s[], int len){
int id = 0;
for(int i=0;i<len;i++){
if('A'<=s[i]<='B'){
id = id*52 + (int) s[i]-'A';
}else{
id = id*52 + (int) s[i]-'a';
}
}
return id;
}
int main(){
int N, M;
int i;
int hashTable[52*52*52+10] = {0};
scanf("%d %d", &N, &M);
printf("有 %d 个待查询的字符串,有 %d 个需查询字符串\n", N, M);
char s1[N][5];
char s2[M][5];
printf("输入待查询数组:\n");
for(i=0;i<N;i++){
scanf("%s", s1[i]);
int id1 = hashFunc(s1[i],3);
hashTable[id1]++;
}
printf("输入需查询数组:\n");
for(i=0;i<M;i++){
scanf("%s",s2[i]);
}
for(i=0;i<M;i++){
int id2 = hashFunc(s2[i],3);
printf("字符串 %s 出现了 %d 次\n", s2[i], hashTable[id2]);
}
return 0;
}
教训:写代码的时候要适当把空间开大些,避免偶然出现的bug。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)