我正在尝试创建一个对给定字符串进行操作的哈希键函数。但是,因为在C中,字符串是char类型的数组,其中数组的长度与用户输入字符串的长度不匹配,我无法弄清楚如何在不读取用户输入的情况下读取给定的字符串已进入。
我尝试使用calloc但似乎无法在函数
的参数内初始化 int hashKey(char *c = calloc(100, sizeof(char)){
int i = 0;
int k;
int h = 0;
while (*(c+i) != 0){
i++;
}
for(k = 0; k<i; k++){
h += *(c+k);
}
h = h%10;
return h;
}
答案 0 :(得分:0)
在你的情况下,你不需要知道字符串的长度。
只需在while
循环中进行哈希计算,即
while (c[i] != 0)
{
// calc. hash
}
如果确实需要字符串长度,您可以让调用者提供它或使用strlen()
函数。如果性能有问题,应该首选第一个选项。
答案 1 :(得分:0)
C中的字符串是nul终止的char数组,所以你可以继续直到你遇到字符串终止(nul)。
例如:
int hashKey(char *c){
int k;
int h = 0;
for(k = 0; c[k]; k++){
// ^^^ stop when the termination is reached
h += *(c+k); // or: h += c[k];
}
h = h%10;
return h;
}
另一种实现方式可能是:
int hashKey(char *c){
int h = 0;
while(*c){
h += *c;
++c; // Move to next char
}
h = h%10;
return h;
}