我想知道如何带10个名称的文本文件并阅读。通过降级并用除法形成哈希表来排序10个名称。我需要构造它们的链表。哈希表的索引为7。
我已经尝试过匹配指针变量并创建了一个哈希表,但是我做不到。我在制作哈希表,插入数据,打印哈希表和搜索数据时遇到麻烦(当我键入名称时可以找到一个函数。)。我需要添加更多功能。如何实现?
#define SIZE 7
struct node {
char data[100][20];
struct node* next;
};
struct index {
struct node* head;
int count;
};
struct sum (data){
struct node* ptr;
int sum,i;
for (i=0; i<20; i++) {
ptr -> data[i] = ptr;
strcpy(sum,ptr);
}
return sum;
};
int hashFunction (int sum) {
return sum%SIZE;
}
void descend (data) {
int temp;
for(i=0;i<100;i++) {
for(j=0;j=20;j++) {
if (data[i][j+1]>data[i][j])
temp=data[i][j];
data[i][j]=data[i][j+1];
data[i][j+1]=temp;
}
}
}
int main (void) {
char data[100][20];
FILE *fp;
fp = fopen("data.txt","r");
for (int i=0; i<20; i++)
fscanf (fp,"%s",&data);
printf("%s\n",data);
}
fclose(fp);
hashTable = (struct index*)malloc(SIZE*sizeof(struct index));
descend(data);
return 0;
}
答案 0 :(得分:0)
代码中有很多错误,我只是想说一下。首先是这个
fscanf (fp,"%s",&data);
应该是
fscanf (fp,"%s",&data[i]);
第二,在descend()
函数内循环条件部分中,您正在使用j=20
,该循环无限运行。这是MACRO派上用场的地方,因为此j=20
仅运行即可,即如果它可能具有ROW=j
ROW
的{{1}},编译器会产生有意义的错误。这个
20
可以使用正确的版本void descend (data) { /* what is the tyep of data ? you should mention the data type */
int temp;
for(i=0;i<100;i++) { /* there are only 20 lines not 100 i.e it should be i<20 */
for(j=0;j=20;j++) { /* condition is wrong, you indented for j<20 but that too
wrong as there are supposed to be max 100 char in line
it should be j<100 */
if (data[i][j+1]>data[i][j]) /* condition is not correct */
temp=data[i][j];
data[i][j]=data[i][j+1];
data[i][j+1]=temp;
}
}
}
descend
还要检查void descend (char (*data)[ROW], int col) { /* define ROW as macro with value 20 and pass the col i.e 100 */
int temp;
for(i=0;i < ROW; i++) {
for(j=0;j < col; j++) {
if (data[i][j] > data[i][j+1])
temp = data[i][j];
data[i][j] = data[i][j+1];
data[i][j+1] = temp;
}
}
}
的返回值以检查它是否成功或失败,并进行适当的验证。对于例如
fopen()
答案 1 :(得分:0)
首先,您似乎应该声明char data[20][100]
而不是char data[100][20]
。
然后,在20次迭代的循环中,应该引用data[i]
而不是data
:
for (int i=0; i<20; i++)
fscanf(fp,"%s",data[i]);
printf("%s\n",data[i]);
}
请记住,您假设输入文件中的每一行最多为99个字符长。
这不能回答我想出的实际问题,但至少应解决所有上述问题。