`
misswolf
  • 浏览: 16450 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

用C++给自己的主页写留言本

    博客分类:
  • c++
阅读更多

/*    create by woundedsoul 
* 本类是处理变量及其关联值
*  本人在暑假中没事干!偶尔看到一篇说用Delphi写CGI程序的文章
*  于是我想用C++为自已做一个动态网站吧!本来是想学ASP做的无
*  赖本人太懒(能用C++写何不用呢?呵呵!)
*  偶这个留言本是用文本文件存储访客留言的,不过我正打算把它转到Mysql 数据库里
*
*
*
*
*
*
*/
//---------------------------webtools.h-----------------------------//
#include<memory.h>
#include<stdlib.h>
class URL
{
 public:
    
      URL(char * string);
    
    ~URL();
   
    char* operator [](const char * varname);
  
  int Pos(const char *Data,char ch);       //返回Ch在字串中第一次出现的位置
  
  int Pos(const char *Data,const char*sub);   //返回sub子串在字符串第一次出现的位置
  
  int Pos(const char *Data,int begin,char ch);   //返回Ch在字符串从begin后第一次出现位置
  
  char * Sub(const char *Data,int begin,int end); //返回子串
  
  char * ExtractFromData(const char * Data,const char * tag);
    
  char * decodeURLString(const char* URLstr);         //对客户端浏览器返回的数据流进行解码
    
  char translateHex(char hex);          //转换成16进制   
 
 private:
   
   char *str;         //解码前的URL
   
   char *decode_str;     //解码后的URL

};

 

//以下是类的实现部分

//--------------------------------------------------------------------------------------------------------------------------------------------
URL::URL(char* string)
{
  int len=strlen(string);
        str=new char[len+1];
        strcpy(str,string);
        str[len]='\0';
        decode_str=decodeURLString(str);

}

//--------------------------------------------------------------------------------------------------------------------------------------------
URL::~URL()
{
    delete str;
}


char * URL:: operator[](const char *varname)
{
 return ExtractFromData(decode_str,varname);
}

//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,char ch)
{
 int length_Data=strlen(Data);
    for(int i=0;i<length_Data;i++)
    {
      if(Data[i]==ch)
        return i;
      else
        continue;
    }
    return -5000;
}

//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,const char*sub)
{
 int token=0;
    int length_Data=strlen(Data);
    int length_sub=strlen(sub);
    for(int i=0;i<length_Data;i++)
     {
        token=0;
        for(int j=0;j<length_sub;j++)
        {
           if(Data[i+j]==sub[j])
           {
                token++;
               
           }
        }
        if(token==length_sub)
          return i;
        else
          continue;
       
     }
     return -5000;
}

//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,int begin,char ch)
{
 int length_data=strlen(Data);
  if(begin<0)
    return -5000;
  for(int i=begin;i<length_data;i++)
     if(Data[i]==ch)
        return i;
     else
        continue;
  return -5000;
}

//--------------------------------------------------------------------------------------------------------------------------------------------
char * URL:: Sub(const char *Data,int begin,int end)
{
 int length_Data=strlen(Data);
      int count=end-begin;
      if(count<0)
        exit(1);
      char *temp=new char[count+1];
      temp[count]='\0';
      if(temp!=NULL)
        {
            for(int i=0;i<count;i++)
            {
                temp[i]=Data[begin+i];
            }
            return temp;
         }
      else
        return NULL;
}

//--------------------------------------------------------------------------------------------------------------------------------------------
char URL::translateHex(char hex)
{
 if(hex >= 'A')
      return (hex & 0xdf) - 'A' + 10;
    else
      return hex - '0';
}

//--------------------------------------------------------------------------------------------------------------------------------------------
//----------------------解码浏览器返回的URL数据-----------------------------------------------------------------------------------------------
char * URL::decodeURLString(const char* URLstr)
{
 int len = strlen(URLstr);
    char* result = new char[len + 1];
    memset(result, len + 1, 0);
    for(int i = 0, j = 0; i <= len; i++, j++) {
      if(URLstr[i] == '+')
        result[j] = ' ';
      else if(URLstr[i] == '%') {
        result[j] =
          translateHex(URLstr[i + 1]) * 16 +
          translateHex(URLstr[i + 2]);
        i += 2;
      } else
        result[j] = URLstr[i];
    }
    return result;
}

//--------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------从URL中提取变量的值--------------------------------------------------------------------------------------------------
char * URL::ExtractFromData(const char * Data,const char * tag)
{
    int position=0;
    int position1=0;
    position=Pos(Data,tag);

    if(position>=0)
    {
        position1=Pos(Data,position,'&');

        if((position+1+strlen(tag))==position1)
            return NULL;      //如果为空则返回NULL
        if(position1>0)
          return Sub(Data,(position+1+strlen(tag)),position1);
        else
          return Sub(Data,(position+1+strlen(tag)),strlen(Data));
          //return NULL;
    }
    else
    {
        return NULL;
    }
}
//--------------------------------------------------------------------------------------------------------------------------------------------
GET 方法最简单了!
char *str=getenv("QUERY-STRING")就可以读到用GET文法从URL返回的数据了!
下面是POST方法!
char *len=getenv("CONTENT-LENGTH");
int length=atoi(len);
char *str=new char[length+1];
str[length]='\0';
cin.read(str,length);

分享到:
评论

相关推荐

    用c++语言写的计算器

    自己用c++语言写成的计算器,运用了数据结构的堆栈和链表的知识。能支持+-*/以及括号()运算,根据人们的计算习惯,先算括号里的再算*/最后+-。支持六位整数、六位整数与六位小数组成的浮点数。强大的容错机制,能...

    c++语言写的计算器(源码)

    ***上次发了一个自己用c++语言写成的计算器,如果大家喜欢的话,可以下载源码来学习学习。资源分不多,还望大家的支持******本程序运用了数据结构的堆栈和链表的知识。能支持+-*/以及括号()运算,根据人们的计算习惯...

    IDW插值算法C++版本

    IDW插值算法,C++源代码,有大量注释,看不懂可以留言给我,我会即使回答

    内存修改工具 C++ 源码

    自己用C++写的类似CE 的内存修改工具 工作忙目前只写了 4字节整数 功能 发布源码给新手参考 VS2010及以上版本编译 调试 需修改权限,在项目 配置属性--&gt;链接器--&gt;清单文件--&gt;UAC 执行级别.改成requireAdministrator ...

    STM32C++ Usart类 用C++编程STM32

    本程序是我用C++语言编写的STM32单片机工程模板,用C++开发STM32,可以使程序更加直观,架构更加清晰,希望本例子能帮助到大家。有问题可以留言哦。

    sybase12.5.2版本 c++ openclient

    sybase12.5.2版本从下载到安装、配置、使用c++demo进行访问连接的全流程,如果资源失效,请及时留言

    VS2008 C++实现的LBP算法

    LBP是人脸识别中一种有效的特征提取算法,本程序把LBP算法封装成了一个类,简单易懂,可以直接应用在自己的工程里。 严正敬告:你不要可以不下,我自己留着以后作参考,我不知道你们的需求是什么,也不要觉得是我要...

    【VC++游戏开发】用C++架构一个适合windows游戏编程的框架:BCF

    本资源实现如下:用C++架构了一个适合windows游戏开发的简易框架,效仿的MFC,能使用MFC类库进行面相对象游戏编程,简单实用 我将其取名为BCF:BlueCoder Frame 大家可以多多测试一下,如发现bug,请到我的博文中...

    一个多用户留言本

    一个多用户留言本

    一个很豪华的留言本程序

    个很豪华的留言本程序,界面很漂亮

    C++MFC教程

    MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。...

    玩具中国简易留言本

    玩具中国简易留言本,整个程序只有一个文件和数据库,非常简洁。留言本管理帐号:admin 密码:admin

    sift与surf算子经典代码,基于opencv的c++代码及文档

    本人很辛苦整理的sift及surf的相关资料,基于opencv的c++程序,还有两种算子的经典论文及中文翻译资料,内容详尽,足够理解两种算法。如有疑问,欢迎留言。谢谢。

    C++PCM音频格式录音(双缓存MFC版本)

    C++PCM音频格式录音(双缓存MFC版本),详情见博客,有问题到博客留言,这边不会推送,很少会看到 http://blog.csdn.net/weixinhum/article/details/76158998

    C++基础教程Beta 版

    本教程根据Juan Soulie的英文版C++教程翻译并改编。本版为最新校对版,尚未定 稿。如有不明或错误之处,请参考英文原版,并敬请在本站留言指正。版权归作者所 有,欢迎链接,请勿转载。 本教程对C++语言进行了深入浅...

    C++编程思想(两卷合订本)

    C++编程思想(两卷合订本)高清版,使用C++必读的书目, 此书更注重C++的使用而非文法,设计思想和编程思想,还有C++primer plus需要的请留言,因为高清版本太大传不上来。

    大数运算类(C++实现)(代码注释详细,运行main.cpp就行,内含有可直接执行的exe文件)

    如果有表意不明的地方请各位下载的用户私聊或者留言,看到之后必定会给详细回复(该大数运算类所用的数据结构:列表并非是用c++标准库的模板类,而是用作者手打的链表实现的)(压缩包内部有exe文件可以在Windows10...

    浪漫星空留言本 v1.26B

    浪漫星空留言本 v1.26B

    c++ 软件工程方法

    本电子书仅供读者预览,请在下载24小时内删除,不得用作商业用途; 如果喜欢请购买正版图书!网友上传是为了宣传本书,版权归原作者。 资源来源于网络,如不愿此书在此与众大家分享,请留言或者站短并告诉我删除方法及...

    c++贪吃蛇v2.00版

    该版本已全面升级,拥有日志、选关等新功能。因该版本不开源,若程序有bug请在评论区留言!

Global site tag (gtag.js) - Google Analytics