.2.2 C 语言关键字有哪些 double :声明双精度变量或函数 int: 声明整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else :条件语句否定分支(与 if 连用) long :声明长整型变量或函数 switch :用于开关语句 case:开关语句分支 enum :声明枚举类型 register:声明积存器变量 char :声明字符型变量或函数 extern:声明变量是在其他文件正声明(也可以看做是引用变量) return :子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const :声明只读变量 float:声明浮点型变量或函数 short :声明短整型变量或函数 unsigned:声明无符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句可意会不可言传) signed:生命有符号类型变量或函数 void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do :循环语句的循环体 while :循环语句的循环条件 static :声明静态变量 if:条件语句 -4- 数据结构课程设计之 C 源文件关键字统计 李华溢 060505142.3 Hash 表的建立为了避免冲突分布集中,采用 Hash 函数HashKeyKey 第一个字符在 1-26 个字母中的序号100Key 最后一个字符在 1-26个字母中的序号41首先申请数组结构体 41 个。
结构体数组里面有数据域和指针域。
数据域存放关键字指针域存放冲突以后新建的结点的地址。
初始化的时候将字符串算出对应的地址s0-dlta100send-dltasize s 是字符串。
如果这个地址上暂时没有关键字,在当前位置存放这个关键字。
如果已有,寻找其指针指向的位置,直到找到空位置,建立关键字。
2.4 算法描述 2.4.1 读入 C 源程序(按字符读入) 建立 fstream 对象 in 然后用函数 getlineins按行读入字符串到 string s 中 再建立 istringstream 对象 sin,s 赋值给 sin。
然后 sin 输出给 char ch 2.4.2 识别单词 因为关键字都是小写字母组成不含有其他字符。
所以在对源文件进行扫描的时候申请一个字符 串名为 TestStr 将从第一个是小写字母的字符开始到最后一个是小写字母的字符 TestStr 然后 对 TestStr 进行 Hash 查找 找到对应关键字 关键字次数1 找不到 返回。
2.4.3 Hash 查找 1用外部文件 key.txt 中已有的关键字建立 hash 表。
然后将识别单词中获取的 TestStr 字符串进 行 Hash 查找。
如果找到对应记录说明是关键字,关键字个数1,不是则退出。
2对于 Hash 冲突在这个程序中采取的冲突解决方式是拉链法。
如果在关键字在 Hash 表对应的位置已经被占用了那么开辟一个新的数据域并用占用位置的一 个指针指向新数据域。
2.4.4 特殊情况的处理 以下三种特殊情况 “ ”之间 / /注释块之间 // 注释行 的字符串不需要参与统计 在进行 C 源文件扫描的时候 是按字符一个一个读入的 定义 2 个 char 型变量 ch prech prech 初始化为 ‘’ ch 记录当前字符 prech 记录当前字符之前的一个字符 1 对于” ”处理的办法 定义一个 int 型变量 enable_yh 初始化为 1 每次用 ch 读入字符的时候做以下判断 若 enable_yh1ch’ ” ’的时候 将 enable_yh 改成 0 若 enable_yh0ch’ ” ’的时候 将 enable_yh 改成 1 enable_yh1 时候才进行 Hash 查找 2 对/ /注释块处理的办法 定义一个 int 型变量 enable_xh 初始化为 1 每次用 ch 读入字符的时候做以下判断 prech/ch enable_xh0 prechch/ enable_xh1 enable_yh1 时候才进行 Hash 查找 3 对//注释行处理的办法 定义一个 int 型变量 enable_xg 在对 C 源文件进行按行读写的时候 读每行之前 e nable_xg 初始化为 1 prech 初始化为’’ 如果在读一行的过程中 prech’/’ch’/’ 就 让 enable_xg 改为 0 .enable_xg1 时候才进行 Hash 查找 -5- 数据结构课程设计之 C 源文件关键字统计 李华溢 06050514三、算法实现 3.1 数据结构 全局变量 search_chances 记录进入 Hash 查找的函数的次数 search_times 记录 Hash 查找的次数 两者相除就是平均查找次数 包括成功失