1 C
2 C++
3 Windows
4 Linux
5 数据库
- 5.1 SQL
- 5.2 Mysql
- 5.3 Oracle
- 5.5 Sqlite
- 5.6 数据库范式
- 5.7 游标
6 数据结构
7 算法
- 7.1 栈和队列
- 7.2 基本排序算法
- 7.3 合并排序
- 7.4 快速排序
- 7.5 优先级队列与堆排序
- 7.6 符号表及其基本实现
- 7.7 深度优先算法 DFS 和广度优先算法 BFS
- 7.8 桶排序
- 7.9 基数排序
8 Qt
9 AS400
10 Web
- 10.2 JavaScript
- 10.3 简述 cookie 和 session 及 token
- 10.4 Https 双向证书认证
- 10.5 URL 详解
12 C
13 框架
14 协议
15 工具
17 QA
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论