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;
}
- C语言的两个小函数: 格式化当前时间和返回字符串中两个子字符串间的内容
- c语言:查找两个字符串的最大公共子串
- C语言strpbrk()函数:返回两个字符串中首个相同字符的位置
- 在一个时间字符串数组中找出离当前时间字符串最近的前后两个时间
- 编程两个小问题,C语言中如何读取一行字符串的问题和VS2008中调试出错一个问题
- C语言进阶之路------关于字符串函数的小例子(用函数连接两个字符串)
- C语言——字符串查找字符的两个函数
- c语言初学--计算字符串中数字的最大长度并提取 以及输入两个子串 提取分别以这为开头和结尾的字符串
- C语言中比较两个字符串的大小
- c 语言中连续输入两个字符串的问题
- 常见C语言面试题之五:两个字符串的最大公共子字符串
- c语言关于时间的两个函数
- C语言strstr()函数:返回字符串中首次出现子串的地址
- C语言strstr()函数:返回字符串中首次出现子串的地址
- C语言strstr()函数:返回字符串中首次出现子串的地址
- 找出两个字符串中最大的公共子字符串
- 查找两个字符串中最大的相同子字符串长度
- 求两个字符串中最长连续子字符串的长度
- symbian读写zip
- 什么是SSH?
- P2P网络中DHT算法分析
- Mapguide open source 利用 king.Oracle的问题。
- vim替换功能
- C语言的两个小函数: 格式化当前时间和返回字符串中两个子字符串间的内容
- Reading Codes in Linux, by taglist + ctags
- fckedit和struts2集成不能上传文件的解决方法
- C#获取项目程序路径的方法
- d006: 交换两数值
- vc 调试 小知识
- xorg安装遇到的问题 Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices
- 寻花,问雨
- SQL Convert的用法