二叉树的思路,查找1000个成语中的某一个成语。
#include<stdio.h>
#define MAX1 8800000 //准备查找成语文件的大小。
int flag3 = 0;?? //标记是否成功的变量。
void toBinary(char *c,char *binaryArray) {
??? char ch[9] = {'\0'};
??? int k = 0;
??? int i;
??? int j = 0;
??? while ('\0' != c[j])//一个字一个字的循环。
??? {
??????? if (c[j] != ',') {//当没有遇见逗号的时候。
??????????? for (i = 7;i >= 0;i--)
??????????? {
??????????????? ch[i] = (c[j]&1)+'0';
??????????????? c[j]>>=1;
??????????? }
??????????? for (int kk = 0; kk<=7; ++kk) {
??????????????? binaryArray[k] = ch[kk];
??????????????? k++;
??????????? }
??????? }else {
??????????? binaryArray[k] = ',';
??????????? k++;
??????? }
??????? j++;
??? }
}
void toBinary2(char *c,char *binaryArray,char *bijiao) {//判断bijiao是否在结果中。
??? char ch[9] = {'\0'};
??? int k = 0;
??? int i;
??? int j = 0;
??? int flag = 0;//用于判断是否到下个汉字了。
??? int k2 = 0;
??? while ('\0' != c[j])
??? {
??????? if (c[j] != ',') {//一个字节8位。
??????????? for (i = 7;i >= 0;i--)
??????????? {
??????????????? ch[i] = (c[j]&1)+'0';
??????????????? c[j]>>=1;
??????????? }
??????????? for (int kk = 0; kk<=7; ++kk) {
??????????????? binaryArray[k] = ch[kk];
??????????????? if (bijiao[k2]==binaryArray[k]) {
??????????????????? flag++;//当flag == 96 的时候就是遇见相同的了。
??????????????? }else{
??????????????????? flag = 0;
??????????????? }
??????????????? k++;
??????????????? k2++;
??????????? }
??????? }else {
??????????? binaryArray[k] = ',';
??????????? k++;
??????????? k2 = 0;//每当换下个词语的时候都归0;
??????????? flag = 0;
??????? }
??????? j++;
??????? if (flag==96) {//如果flag ==96证明已经连续找到了四个相同的汉字了。
??????????? flag3=1;
??????? }
??? }
}
int main()
{
??? FILE *fp;
??? char name[97] = "张明炜在";//要查找的内容。
??? //小的时候用栈完全可以,大的时候,必须用堆。
??? char *filename = malloc(MAX1);//文件存放的内容。96*80000
??? memset(filename,0,MAX1);//初始化为0,没有必要。
??? char *bijiao = malloc(MAX1);
??? memset(bijiao,0,MAX1);
??? toBinary(name, bijiao);//把要找的内容转换为二进制。
??? if((fp=fopen("/Users/zhangmingwei/Desktop/33.txt","r"))==NULL) //以读写方式打开
??? {
??????? printf("Can not open file\n");
??????? return 0;
??? }
??? fgets(filename, MAX1, fp);//读取文件内容。
??? char *res = malloc(MAX1);
??? toBinary2(filename, res,bijiao);//把文件内容转换为二进制。用第二种方法来判断。
//??? printf("res===%s",res);
//??? puts(res);//res是以逗号分割的多个二进制的成语。
??? //现在只需要查找,看bijiao 是否在res 中就行了。res 中的数据是以逗号分割的。
??? if (flag3==1) {
??????? printf("\n\n恭喜你成功了。\n\n");
??? }else{
??????? printf("\n\n对不起,没有找到。\n\n");
??? }
??? fclose(fp);
??? free(filename);
??? free(bijiao);
??? free(res);
??? return 0;
}