2.2 C++ code
1. 计算含有汉字的字符串长度
/**********************************************************************
* 函数名称: gbk_strlen
* 功能描述: 计算含有汉字的字符串长度,汉字作为一个字符处理
* 输入参数: 需要计算的字符串
* 输出参数:
* 返 回 值: 字符串长度
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
*
***********************************************************************/
int gbk_strlen(const char* str)
{
const char* p = str; //p用于后面遍历
while(*p) //若是结束符0,则结束循环
{
if(*p < 0 && (*(p+1)<0 || *(p+1) < 63)) //中文汉字情况
{
str++; //str移动一位,p移动移动2位,因此长度加1
p += 2;
}
else
{
p++; //str不动,p移动一位,长度加1
}
}
return p-str; //返回地址之差
}
2. Gbk互相转换UTF8
/**********************************************************************
* 函数名称: GbkToUtf8
* 功能描述: Gbk转化为UTF8
* 输入参数: 需要转化的字符串(Gbk)
* 输出参数: 转化后的字符串(UTF-8)
* 返 回 值: 无
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
*
***********************************************************************/
string GbkToUtf8(const std::string &strGBK)
{
string strOutUTF8 = "";
WCHAR *str1;
int n = MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,NULL,0);
str1 = new WCHAR[n];
MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,str1,n);
n = WideCharToMultiByte(CP_UTF8,0,str1,-1,NULL,0,NULL,NULL);
char *str2 = new char[n];
WideCharToMultiByte(CP_UTF8,0,str1,-1,str2,n,NULL,NULL);
strOutUTF8 = str2;
delete[]str1;
str1 = NULL;
delete[]str2;
str2 = NULL;
return strOutUTF8;
}
/**********************************************************************
* 函数名称: Utf8ToGbk
* 功能描述: UTF8转化为Gbk
* 输入参数: 需要转化的字符串(utf8)
* 输出参数: 转化后的字符串(Gbk)
* 返 回 值: 无
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
*
***********************************************************************/
string Utf8ToGbk(const std::string & strUTF8)
{
string strOutGBK = "";
WCHAR *str1;
int n = MultiByteToWideChar(CP_UTF8,0,strUTF8.c_str(),-1,NULL,0);
str1 = new WCHAR[n];
MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, str1, n);
n = WideCharToMultiByte(CP_ACP, 0, str1, -1, NULL, 0, NULL, NULL);
char *str2 = new char[n];
WideCharToMultiByte(CP_ACP, 0, str1, -1, str2, n, NULL, NULL);
strOutGBK = str2;
delete[]str1;
str1 = NULL;
delete[]str2;
str2 = NULL;
return strOutGBK;
}
3. 判断字符串是否为纯数字
/**********************************************************************
* 函数名称: IsDigit2
* 功能描述: 判断字符串是否为纯数字
* 输入参数: 需要判断的string
* 输出参数:
* 返 回 值: true:纯数字,false:非纯数字
* 其它说明:
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
*
***********************************************************************/
bool COperator_Special::IsDigit2(string str)
{
for(int i=0;i<str.size();i++)
{
if ((str.at(i)>'9') || (str.at(i)<'0') )
{
return false;
}
}
return true;
}
4. 解析csv文件
/***
* 解析csv文件
*/
BOOL ParseCSVFile(string fileName)
{
//文件名错误
vector<string> fields; //声明一个字符串向量
string field;
SplitString(fileName.c_str,fields,".");
if (fields.size() < 2 || fields[fields.size()-1] != "csv")
{
//"文件格式错误";
}
ifstream fin(fileName); //打开文件流操作
string line;
int lineCount = 0;
while (getline(fin, line)) //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
{
vector<string> fields; //声明一个字符串向量
string field;
SplitString(line,fields,",");
if (fields.size() != 7)
{
continue;
}
string loginName = Trim(fields[0]); //用户登录名
string userName = Trim(fields[1]); //用户名称
string cardId = Trim(fields[2]); //身份证号
string sex = Trim(fields[3]); //性别
string ustatus = Trim(fields[4]); //状态
string invalidTime = TimeToDbTime(Trim(fields[5])); //到期时间
string department = Trim(fields[6]); //所属部分信息
if (lineCount == 0)
{
lineCount++;
continue;
}
lineCount++;
//具体处理方法。。。
}
return TRUE;
}
/***
* 按指定字符截取字符串
*/
void SplitString(const string& str, vector<string>& ret_, const string &sep)
{
if (str.empty())
{
return ;
}
string tmp;
string::size_type pos_begin = 0;//str.find_first_not_of(sep);
string::size_type comma_pos = 0;
while (pos_begin != string::npos)
{
comma_pos = str.find(sep, pos_begin);
if (comma_pos != string::npos)
{
tmp = str.substr(pos_begin, comma_pos - pos_begin);
pos_begin = comma_pos + sep.length();
}
else
{
tmp = str.substr(pos_begin);
pos_begin = comma_pos;
}
ret_.push_back(tmp);
}
}
/***
* 删除字符串中空格,制表符tab等无效字符
*/
string Trim(string& str)
{
str.erase(0,str.find_first_not_of(" \t\r\n"));
str.erase(str.find_last_not_of(" \t\r\n") + 1);
return str;
}
5. 解析csv文件
//系统日志信息
typedef struct tagSysLogInfo
{
int userId; //需删除
char operatorIp[40]; //需删除
char sid[50];
SysLogType logType;
char logContent[100];
char logCondition[4096];
}T_SysLogInfo;
//增加系统日志
AddLogInfo(userInfo,LOG_TYPE_ADD,"新增区域黑名单信息,黑名单名:%s",blackName.asCString());
/**
* 增加系统日志信息
*/
bool AddLogInfo(GyUserInfo& userInfo,SysLogType tType,const char* pcFormat,...)
{
if (m_pLogManage == NULL)
{
return false;
}
T_SysLogInfo t_logInfo;
memset(&t_logInfo,0,sizeof(T_SysLogInfo));
t_logInfo.userId = userInfo.iUserId;
t_logInfo.logType = tType;
va_list arglist;
va_start(arglist, pcFormat);
vsnprintf(t_logInfo.logContent,sizeof(t_logInfo.logContent),pcFormat,arglist);
va_end(arglist);
if ( m_pLogManage->SendMessage(ADD_SYS_LOG_INFO,(WPARAM)&t_logInfo, (LPARAM)this) == MSG_OK)
{
return true;
}
return false;
}
打赏
License
本作品由Simon(http://www.uusystem.com)创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示此声明以及原文链接。如您有任何疑问或者授权方面的协商,请邮件:postmaster@uusystem.com。