📄 hashtext.cpp
字号:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
typedef int KeyType;
#include "DataType.h"
#include "HashTable.h"
int maxline ;
/////////////////////////////////////////////////////////////
///// 求姓名的ASCLL码实现 ////
/////函数名: : getvalue () ////
/////////////////////////////////////////////////////////////
int getvalue(int i)
{
int sum=0,num,strl,j;
char name[20];
//姓名ASCLL码求和函数
cout<<"请输入你要存储的用户的第"<<i+1<<"姓名"<<endl;
cin>>name;
strl=strlen(name);
for(j=0;j<strl;j++)
{
num=(int)name[j];
if(num>64&&num<91||num>96&&num<123) //排除空格
sum=num+sum;
}
return sum;
}
/////////////////////////////////////////////////////
///// 主函数实现 ////
/////////////////////////////////////////////////////
void main()
{
int i,j,strl,sum=0,num;
int c[30];
cout<<"请输入你要存储的用户的姓名个数"<<endl;
cin>>maxline;
for(i=0;i<maxline;i++)
c[i]=getvalue(i);//得到保存有姓名的ASCLL值的数组的指针
//定义哈希表长(int)maxline*1.7(初始化)
HashTable myHashTable((int)maxline*1.7);
DataType *a,item;
a=new DataType[maxline];//动态申请文件中姓名个数多个的数组空间
//将保存有姓名的ASCLL值的数组的值付给a[i].key
for(i=0;i<maxline;i++)
{
a[i].key=c[i];
}
//将姓名的ASCLL码插入哈希表中
for(i=0;i<maxline;i++)
{
myHashTable.Insert(a[i]);
}
//输出姓名ASCLL码在哈希表中的位置
cout<<"数据在哈希表中的位置是:"<<endl;
for(i=0;i<maxline;i++)
{
j=myHashTable.Find(a[i]);
if(j>=0)//这里与书上不同
{
item=myHashTable.GetValue(j);
cout<<"j="<<j<<" ht[]="<<item.key<<endl;
}
}
//查找的语句
cout<<"请输入你要查找的姓名:"<<endl;
char b[20];
cin>>b; //不接收空格,而当作字符结束
//计算用户输入的姓名的ASCLL码值
strl=strlen(b);
for(j=0;j<strl;j++)
{
num=(int)b[j];
if(num>64&&num<91||num>96&&num<123) //排除空格,符号等非字母元素
sum=num+sum;
}
//判断是否在
int k=myHashTable.IsIn(sum);
if(k==1) cout<<"你输入的姓名在用户表文件中!"<<endl;
else cout<<"你输入的姓名不在用户表文件中!"<<endl;
cout<<"谢谢你的使用,本程序将退出!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -