【发布时间】:2015-01-14 16:53:52
【问题描述】:
我正在尝试读取一个名称文件,并根据它们的字母值将这些名称散列到一个位置。我已成功获取文件中每个名称的值,但在创建哈希表时遇到了问题。我可以只使用一个常规数组并编写一个函数来将单词放在它们的值的索引处吗?
while (fgets(name,100, ptr_file)!=NULL) //while file isn't empty
{
fscanf(ptr_file, "%s", &name); //get the first name
printf("%s ",name); //prints the name
int length = strlen(name); // gets the length of the name
int i;
for (i =0; i <length; i++)
//for the length of the string add each letter's value up
{
value = value + name [i];
value=value%50;
}
printf("value= %1d\n", value);
}
【问题讨论】:
-
我认为您没有成功获取名称,因为您从文件中读取了两次。除了
fscanf(ptr_file, "%s", &name);似乎是错误的事实之外,因为您这样做了fgets(name, 100, ptr_file) -
是的,你可以。但请记住,在一个值上可能有多个单词,即哈希冲突。为了减少冲突的机会,您可以使用更好的哈希函数,或者如果您只想使用它,您将不得不选择在哈希数组中的一个值处存储多个单词
-
注意:使用散列,如果
n是value%n中的质数,通常数据会更好地分散。
标签: c arrays string file hashtable