zoukankan      html  css  js  c++  java
  • 81.内存模式实现cgi查询

    • 创建全局的二级指针
      1 char  ** g_pp;//全局的二级指针
    • 获取数据有多少行
       1 //获取行数
       2 int getimax()
       3 {
       4     int hang = -1;
       5     FILE *pf = fopen(path, "r");//读文件打开路径
       6     if (pf == NULL)
       7     {
       8         printf("文件打开失败");
       9         return -1;
      10     }
      11     else
      12     {
      13         hang = 0;
      14         while (!feof(pf))//到了文件末尾返回1,没有返回0
      15         {
      16             char readstr[1024] = { 0 };
      17 
      18             fgets(readstr, 1024, pf);//读取一行
      19 
      20             hang++;//自增
      21 
      22         }
      23         fclose(pf);//关闭
      24         return hang;
      25     }
      26 }
    • 定义行数
      1 int   imax = 16151574;//标示有多少行
    • 载入内存
       1 void loadfromfile()
       2 {
       3 
       4     g_pp = (char **)malloc(sizeof(char*)*imax);     //分配指针数组
       5     memset(g_pp, '', sizeof(char*)*imax);//内存清零
       6 
       7 
       8     FILE *pf = fopen(path, "r");//读文件打开路径
       9     if (pf == NULL)
      10     {
      11         printf("文件打开失败");
      12         return -1;
      13     }
      14     else
      15     {
      16         for (int i = 0; i < imax; i++)
      17         {
      18             char str[1024] = { 0 };
      19             fgets(str, 1024, pf);//按行读取
      20             str[1024 - 1] = '';
      21             int  strlength = strlen(str);
      22 
      23 
      24             g_pp[i] = malloc(sizeof(char)*(strlength + 1));//处理/0
      25 
      26             if (g_pp[i] != NULL)
      27             {
      28                 strcpy(g_pp[i], str);//拷贝到分配的内存
      29             }
      30         }
      31         fclose(pf);//关闭
      32     }
      33 }
    • 查询并写入到文件
      void search(char *str)
      {
          char strpath[100] = { 0 };
          sprintf(strpath, "I:\%s.txt", str);
          FILE *pf = fopen(strpath, "w");//写的模式打开
      
          if (g_pp != NULL)
          {
      
              for (int i = 0; i < imax; i++)
              {
                  if (g_pp[i] != NULL)
                  {
                      char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
                      if (p != NULL)
                      {
                          puts(g_pp[i]);//打印
                          fputs(g_pp[i], pf);//输出到文件
                      }
                  }
              }
          }
          fclose(pf);
      }
    • main
       1     loadfromfile();
       2     printf("Content-type:text/html
      
      ");//换行
       3 
       4     system("mkdir 1");
       5 
       6     char szpost[256] = { 0 };
       7     gets(szpost);
       8     printf("%s", szpost);
       9 
      10     char*p1 = strchr(szpost, '&');
      11     if (p1 != NULL)
      12     {
      13         *p1 = '';
      14     }
      15     printf("<br>%s", szpost + 5);
      16     printf("<br>%s", change(szpost + 5));
      17 
      18     char *p2 = strchr(p1 + 1, '&');
      19     if (p2 != NULL)
      20     {
      21         *p2 = '';
      22     }
      23     printf("<br>%s", p1 + 6);
      24     printf("<br>%s", change(p1 + 6));
      25 
      26     search(szpost + 5);//检索
    • cgi格式转换
       1 char* change(char *str)
       2 {
       3     char *tempstr = malloc(strlen(str) + 1);
       4     int x = 0, y = 0;
       5     char assii_1, assii_2;
       6     while (tempstr[x])
       7     {
       8         if ((tempstr[x] = str[y]) == '%')
       9         {
      10             //y+1 y+2
      11             if (str[y + 1] >= 'A')
      12             {
      13                 assii_1 = str[y + 1] - 55;
      14 
      15             }
      16             else
      17             {
      18                 assii_1 = str[y + 1] - 48;
      19             }
      20             if (str[y + 2] >= 'A')
      21             {
      22                 assii_2 = str[y + 2] - 55;
      23             }
      24             else
      25             {
      26                 assii_2 = str[y + 2] - 48;
      27             }
      28             tempstr[x] = assii_1 * 16 + assii_2;
      29 
      30             y += 2;
      31 
      32         }
      33         x++;
      34         y++;
      35     }
      36     tempstr[x] = '';
      37 
      38     return tempstr;
      39 }

    完整代码

      1 #define   _CRT_SECURE_NO_WARNINGS
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 #include<memory.h>
      6 #include <Windows.h>
      7 #define  path  "kaifang.txt"
      8 
      9 
     10 
     11 
     12 
     13 char  ** g_pp;//全局的二级指针
     14 int   imax = 16151574;//标示有多少行
     15 
     16 //获取行数
     17 int getimax()
     18 {
     19     int hang = -1;
     20     FILE *pf = fopen(path, "r");//读文件打开路径
     21     if (pf == NULL)
     22     {
     23         printf("文件打开失败");
     24         return -1;
     25     }
     26     else
     27     {
     28         hang = 0;
     29         while (!feof(pf))//到了文件末尾返回1,没有返回0
     30         {
     31             char readstr[1024] = { 0 };
     32 
     33             fgets(readstr, 1024, pf);//读取一行
     34 
     35             hang++;//自增
     36 
     37         }
     38         fclose(pf);//关闭
     39         return hang;
     40     }
     41 }
     42 
     43 char* change(char *str)
     44 {
     45     char *tempstr = malloc(strlen(str) + 1);
     46     int x = 0, y = 0;
     47     char assii_1, assii_2;
     48     while (tempstr[x])
     49     {
     50         if ((tempstr[x] = str[y]) == '%')
     51         {
     52             //y+1 y+2
     53             if (str[y + 1] >= 'A')
     54             {
     55                 assii_1 = str[y + 1] - 55;
     56 
     57             }
     58             else
     59             {
     60                 assii_1 = str[y + 1] - 48;
     61             }
     62             if (str[y + 2] >= 'A')
     63             {
     64                 assii_2 = str[y + 2] - 55;
     65             }
     66             else
     67             {
     68                 assii_2 = str[y + 2] - 48;
     69             }
     70             tempstr[x] = assii_1 * 16 + assii_2;
     71 
     72             y += 2;
     73 
     74         }
     75         x++;
     76         y++;
     77     }
     78     tempstr[x] = '';
     79 
     80     return tempstr;
     81 }
     82 
     83 void loadfromfile()
     84 {
     85 
     86     g_pp = (char **)malloc(sizeof(char*)*imax);     //分配指针数组
     87     memset(g_pp, '', sizeof(char*)*imax);//内存清零
     88 
     89 
     90     FILE *pf = fopen(path, "r");//读文件打开路径
     91     if (pf == NULL)
     92     {
     93         printf("文件打开失败");
     94         return -1;
     95     }
     96     else
     97     {
     98         for (int i = 0; i < imax; i++)
     99         {
    100             char str[1024] = { 0 };
    101             fgets(str, 1024, pf);//按行读取
    102             str[1024 - 1] = '';
    103             int  strlength = strlen(str);
    104 
    105 
    106             g_pp[i] = malloc(sizeof(char)*(strlength + 1));//处理/0
    107 
    108             if (g_pp[i] != NULL)
    109             {
    110                 strcpy(g_pp[i], str);//拷贝到分配的内存
    111             }
    112         }
    113         fclose(pf);//关闭
    114     }
    115 }
    116 
    117 void search(char *str)
    118 {
    119     char strpath[100] = { 0 };
    120     sprintf(strpath, "I:\%s.txt", str);
    121     FILE *pf = fopen(strpath, "w");//写的模式打开
    122 
    123     if (g_pp != NULL)
    124     {
    125 
    126         for (int i = 0; i < imax; i++)
    127         {
    128             if (g_pp[i] != NULL)
    129             {
    130                 char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
    131                 if (p != NULL)
    132                 {
    133                     puts(g_pp[i]);//打印
    134                     fputs(g_pp[i], pf);//输出到文件
    135                 }
    136             }
    137         }
    138     }
    139     fclose(pf);
    140 }
    141 
    142 
    143 
    144 void main()
    145 {
    146     
    147     loadfromfile();
    148     printf("Content-type:text/html
    
    ");//换行
    149 
    150     system("mkdir 1");
    151 
    152     char szpost[256] = { 0 };
    153     gets(szpost);
    154     printf("%s", szpost);
    155 
    156     char*p1 = strchr(szpost, '&');
    157     if (p1 != NULL)
    158     {
    159         *p1 = '';
    160     }
    161     printf("<br>%s", szpost + 5);
    162     printf("<br>%s", change(szpost + 5));
    163 
    164     char *p2 = strchr(p1 + 1, '&');
    165     if (p2 != NULL)
    166     {
    167         *p2 = '';
    168     }
    169     printf("<br>%s", p1 + 6);
    170     printf("<br>%s", change(p1 + 6));
    171 
    172     search(szpost + 5);//检索
    173 }
  • 相关阅读:
    Leetcode Unique Binary Search Trees
    Leetcode Decode Ways
    Leetcode Range Sum Query 2D
    Leetcode Range Sum Query
    Leetcode Swap Nodes in Pairs
    Leetcode Rotate Image
    Leetcode Game of Life
    Leetcode Set Matrix Zeroes
    Leetcode Linked List Cycle II
    CF1321A
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8455889.html
Copyright © 2011-2022 走看看