C语言的两个小函数: 格式化当前时间和返回字符串中两个子字符串间的内容

来源:互联网 发布:nba各年状元体测数据 编辑:程序博客网 时间:2024/04/28 19:23

#include "stdafx.h"
#include <time.h>
#include "string"
#include <iostream>
using namespace std;

class Time
{
public:
 Time(void)
   {
   }

   ~Time(void) {}
   string GetTuxTime(int Format)
   {
    string TuxTime = "";
    struct tm *newtime;
    time_t long_time;
    static char curtime[20] = "";
    time( &long_time );               
    newtime = localtime( &long_time );
    if(Format == 1)
     sprintf(curtime,"%04d/%02d/%02d %02d:%02d:%02d",newtime->tm_year+1900,
     newtime->tm_mon+1,
     newtime->tm_mday,newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
    else if (Format == 0)
     sprintf(curtime,"%04d%02d%02d%02d%02d%02d/0",
     newtime->tm_year+1900,newtime->tm_mon+1,newtime->tm_mday,
     newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
    else if (Format == 10)
     sprintf(curtime,"%02d%02d/0",newtime->tm_mon,newtime->tm_mday - 1);
    else if (Format == 20)
     sprintf(curtime,"%02d%02d%02d/0",newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
    TuxTime.assign(curtime);
    return TuxTime;
   }

   char* findString(char* srcStr, char* desStr1, char* desStr2){
    char* tempStr = NULL;
    char* returnStr = NULL;
    int begin = 0;       //需要截取的字符串的开始位置
    int end = 0;         //需要截取的字符串的结束位置
    int tempLen = 0 ;    //desStr1和desStr2在srcStr中的位置
    int totalLen = 0;    //输入的字符串srcStr的长度
    int destStrLen = 0;  //desStr1和desStr2的长度

    destStrLen = strlen(desStr1);
    totalLen = strlen(srcStr);
    tempStr = strstr(srcStr, desStr1);
    if(tempStr != NULL){
     tempLen = strlen(tempStr);
     begin = totalLen - tempLen;
     begin = begin + destStrLen;
    }
    tempStr = strstr(srcStr, desStr2);
    if(tempStr != NULL){
     tempLen = strlen(tempStr);
     end = totalLen - tempLen;
    }

    printf("begin: %d, end: %d/n", begin, end);
    if(begin < end){
     int i,j;
     returnStr = (char*)malloc(end - begin + 1);
     for(i = begin, j = 0; i < end; i ++){
      *(returnStr + j++) = *(srcStr + i);
     }
     *(returnStr + j) = '/0';
    }  
    return returnStr;
   }
  
protected:
private:
};

 

//string.find(string str, int index, int length) 参数一str为要查找的字符串,
   //参数二index为查找的起始位置,默认为0, 参数三为参数一的长度,不够就补,超过则截取
   //string.substr(int begin, int length)
   void filterSourceData(string sourceData, char* sourceDataA, char* sourceDataB){
    string headInfo = "";   //消息头字符串
    int begin = 0;          //每一行"<col colnum="的位置
    int end = 0;            //每一行"</col>"的位置  
    string tempStr = "";     //对每一行截取<col colnum= ...</col> 的字符串
    string tempResult = "";  //每一行>..</col> 之间的结果
    string tempHead = "";    //每一行<col colnum= ....>之间的结果
    int tempBegin = 0;

    int spePost = 0;         //含特殊字符!@# 的位置
    string strA = "";        //结果集中!@#的前半段
    string strB = "";        //结果集中!@#的后半段

    string sourceXmlA = "";
    string sourceXmlB = "";

    //获取头字符串
    begin = sourceData.find("<row rownum=/"1/">");
    headInfo = sourceData.substr(0, begin);
    headInfo += "<row rownum=/"1/">/n";
    sourceXmlA += headInfo;
    sourceXmlB += headInfo;

    sourceData = sourceData.substr(begin + 16);
    while((begin = (int)sourceData.find("<col colnum=")) != -1){
     end = (int)sourceData.find("</col>");
     tempStr = sourceData.substr(begin, end-begin);
     tempBegin = (int)tempStr.find(">");
     tempResult = tempStr.substr(tempBegin + 1);

     tempHead = tempStr.substr(0, tempBegin +1);

     if((spePost = tempResult.find("!@#")) != -1){          
      strA = tempResult.substr(0, spePost);
      strB = tempResult.substr(spePost + 3);

      sourceXmlA += tempHead;
      sourceXmlA += strA;
      sourceXmlA += "</col>/n";
      sourceXmlB += tempHead;
      sourceXmlB += strB;
      sourceXmlB += "</col>/n";
     }else{
      sourceXmlA += tempStr;
      sourceXmlA += "</col>/n";
      sourceXmlB += tempStr;
      sourceXmlB += "</col>/n";
     }
     sourceData = sourceData.substr(end + 6);
    }
    sourceXmlA +="</row></RESULT></RESULTS>";
    sourceXmlB +="</row></RESULT></RESULTS>";
    // cout<<"sourceXmlA: "<<sourceXmlA<<endl;
    // cout<<"sourceXmlB: "<<sourceXmlB<<endl;

    strcpy(sourceDataA, sourceXmlA.c_str());
    strcpy(sourceDataB, sourceXmlB.c_str());
   }

 

int _tmain(int argc, _TCHAR* argv[])
{
 Time test;
 printf("ABC/n");
 string time = test.GetTuxTime(10);
 printf("%s/n", time.c_str());

 

string strData = "<?xml version=/"1.0/" encoding=/"ISO-8859-1/" standalone=/"yes/"?><RESULTS sets=/"1/"><RESULT cols=/"47/" datatype=/"/" rows=/"1/" setnum=/"1/"><row rownum=/"1/"><col colnum=/"1/" name=/"123/" type=/"string/">3328</col><col colnum=/"2/" name=/"113/" type=/"string/">WO0200</col><col colnum=/"3/" name=/"124/" type=/"string/">IPCYW_001</col></row></RESULT></RESULTS>";
 char* sourceDataA = NULL;
 char* sourceDataB = NULL;
 sourceDataA=(char*)malloc(strData.length() + 1);
 sourceDataB=(char*)malloc(strData.length() + 1);
 //sourceDataA = (char*)malloc(2048); 注意如果分配内存不够时会异常
 //sourceDataB = (char*)malloc(2048);

 test.filterSourceData(strData, sourceDataA, sourceDataB);
 if(sourceDataA != NULL){
  cout<<"free A: "<<sourceDataA<<endl;
  free(sourceDataA);
 }
 if(sourceDataB != NULL){
  cout<<"free B: "<<sourceDataB<<endl;
  free(sourceDataB);
 }

 

 

 //测试截取字符串
 char* str1 = "<hello>123</hello><result>0123456</result><reason>success</reason>";
 char* str2 = "<result>";
 char* str3 = "</result>";
 char* p1 = NULL;
 char* p2 = NULL;
 p1 = strstr(str1, str2);
 printf("%s/n", p1);
 p2 = test.findString(str1, str2, str3);
 printf("%s/n", p2);
 p1 = test.findString(str1, "<reason>", "</reason>");
 if(p1 == NULL){
  printf("NULL");
 }else{
  printf("%s/n", p1);
 }
 getchar();
 return 0;
}

原创粉丝点击