2.2 C++ code

1. 计算含有汉字的字符串长度
  1. /**********************************************************************
  2. * 函数名称: gbk_strlen
  3. * 功能描述: 计算含有汉字的字符串长度,汉字作为一个字符处理
  4. * 输入参数: 需要计算的字符串
  5. * 输出参数:
  6. * 返 回 值: 字符串长度
  7. * 其它说明:
  8. * 修改日期 版本号 修改人 修改内容
  9. * -----------------------------------------------
  10. *
  11. ***********************************************************************/
  12. int gbk_strlen(const char* str)
  13. {
  14. const char* p = str; //p用于后面遍历
  15. while(*p) //若是结束符0,则结束循环
  16. {
  17. if(*p < 0 && (*(p+1)<0 || *(p+1) < 63)) //中文汉字情况
  18. {
  19. str++; //str移动一位,p移动移动2位,因此长度加1
  20. p += 2;
  21. }
  22. else
  23. {
  24. p++; //str不动,p移动一位,长度加1
  25. }
  26. }
  27. return p-str; //返回地址之差
  28. }
2. Gbk互相转换UTF8
  1. /**********************************************************************
  2. * 函数名称: GbkToUtf8
  3. * 功能描述: Gbk转化为UTF8
  4. * 输入参数: 需要转化的字符串(Gbk)
  5. * 输出参数: 转化后的字符串(UTF-8)
  6. * 返 回 值: 无
  7. * 其它说明:
  8. * 修改日期 版本号 修改人 修改内容
  9. * -----------------------------------------------
  10. *
  11. ***********************************************************************/
  12. string GbkToUtf8(const std::string &strGBK)
  13. {
  14. string strOutUTF8 = "";
  15. WCHAR *str1;
  16. int n = MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,NULL,0);
  17. str1 = new WCHAR[n];
  18. MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,str1,n);
  19. n = WideCharToMultiByte(CP_UTF8,0,str1,-1,NULL,0,NULL,NULL);
  20. char *str2 = new char[n];
  21. WideCharToMultiByte(CP_UTF8,0,str1,-1,str2,n,NULL,NULL);
  22. strOutUTF8 = str2;
  23. delete[]str1;
  24. str1 = NULL;
  25. delete[]str2;
  26. str2 = NULL;
  27. return strOutUTF8;
  28. }
  29. /**********************************************************************
  30. * 函数名称: Utf8ToGbk
  31. * 功能描述: UTF8转化为Gbk
  32. * 输入参数: 需要转化的字符串(utf8)
  33. * 输出参数: 转化后的字符串(Gbk)
  34. * 返 回 值: 无
  35. * 其它说明:
  36. * 修改日期 版本号 修改人 修改内容
  37. * -----------------------------------------------
  38. *
  39. ***********************************************************************/
  40. string Utf8ToGbk(const std::string & strUTF8)
  41. {
  42. string strOutGBK = "";
  43. WCHAR *str1;
  44. int n = MultiByteToWideChar(CP_UTF8,0,strUTF8.c_str(),-1,NULL,0);
  45. str1 = new WCHAR[n];
  46. MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, str1, n);
  47. n = WideCharToMultiByte(CP_ACP, 0, str1, -1, NULL, 0, NULL, NULL);
  48. char *str2 = new char[n];
  49. WideCharToMultiByte(CP_ACP, 0, str1, -1, str2, n, NULL, NULL);
  50. strOutGBK = str2;
  51. delete[]str1;
  52. str1 = NULL;
  53. delete[]str2;
  54. str2 = NULL;
  55. return strOutGBK;
  56. }
3. 判断字符串是否为纯数字
  1. /**********************************************************************
  2. * 函数名称: IsDigit2
  3. * 功能描述: 判断字符串是否为纯数字
  4. * 输入参数: 需要判断的string
  5. * 输出参数:
  6. * 返 回 值: true:纯数字,false:非纯数字
  7. * 其它说明:
  8. * 修改日期 版本号 修改人 修改内容
  9. * -----------------------------------------------
  10. *
  11. ***********************************************************************/
  12. bool COperator_Special::IsDigit2(string str)
  13. {
  14. for(int i=0;i<str.size();i++)
  15. {
  16. if ((str.at(i)>'9') || (str.at(i)<'0') )
  17. {
  18. return false;
  19. }
  20. }
  21. return true;
  22. }
4. 解析csv文件
  1. /***
  2. * 解析csv文件
  3. */
  4. BOOL ParseCSVFile(string fileName)
  5. {
  6. //文件名错误
  7. vector<string> fields; //声明一个字符串向量
  8. string field;
  9. SplitString(fileName.c_str,fields,".");
  10. if (fields.size() < 2 || fields[fields.size()-1] != "csv")
  11. {
  12. //"文件格式错误";
  13. }
  14. ifstream fin(fileName); //打开文件流操作
  15. string line;
  16. int lineCount = 0;
  17. while (getline(fin, line)) //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
  18. {
  19. vector<string> fields; //声明一个字符串向量
  20. string field;
  21. SplitString(line,fields,",");
  22. if (fields.size() != 7)
  23. {
  24. continue;
  25. }
  26. string loginName = Trim(fields[0]); //用户登录名
  27. string userName = Trim(fields[1]); //用户名称
  28. string cardId = Trim(fields[2]); //身份证号
  29. string sex = Trim(fields[3]); //性别
  30. string ustatus = Trim(fields[4]); //状态
  31. string invalidTime = TimeToDbTime(Trim(fields[5])); //到期时间
  32. string department = Trim(fields[6]); //所属部分信息
  33. if (lineCount == 0)
  34. {
  35. lineCount++;
  36. continue;
  37. }
  38. lineCount++;
  39. //具体处理方法。。。
  40. }
  41. return TRUE;
  42. }
  43. /***
  44. * 按指定字符截取字符串
  45. */
  46. void SplitString(const string& str, vector<string>& ret_, const string &sep)
  47. {
  48. if (str.empty())
  49. {
  50. return ;
  51. }
  52. string tmp;
  53. string::size_type pos_begin = 0;//str.find_first_not_of(sep);
  54. string::size_type comma_pos = 0;
  55. while (pos_begin != string::npos)
  56. {
  57. comma_pos = str.find(sep, pos_begin);
  58. if (comma_pos != string::npos)
  59. {
  60. tmp = str.substr(pos_begin, comma_pos - pos_begin);
  61. pos_begin = comma_pos + sep.length();
  62. }
  63. else
  64. {
  65. tmp = str.substr(pos_begin);
  66. pos_begin = comma_pos;
  67. }
  68. ret_.push_back(tmp);
  69. }
  70. }
  71. /***
  72. * 删除字符串中空格,制表符tab等无效字符
  73. */
  74. string Trim(string& str)
  75. {
  76. str.erase(0,str.find_first_not_of(" \t\r\n"));
  77. str.erase(str.find_last_not_of(" \t\r\n") + 1);
  78. return str;
  79. }
5. 解析csv文件
  1. //系统日志信息
  2. typedef struct tagSysLogInfo
  3. {
  4. int userId; //需删除
  5. char operatorIp[40]; //需删除
  6. char sid[50];
  7. SysLogType logType;
  8. char logContent[100];
  9. char logCondition[4096];
  10. }T_SysLogInfo;
  11. //增加系统日志
  12. AddLogInfo(userInfo,LOG_TYPE_ADD,"新增区域黑名单信息,黑名单名:%s",blackName.asCString());
  13. /**
  14. * 增加系统日志信息
  15. */
  16. bool AddLogInfo(GyUserInfo& userInfo,SysLogType tType,const char* pcFormat,...)
  17. {
  18. if (m_pLogManage == NULL)
  19. {
  20. return false;
  21. }
  22. T_SysLogInfo t_logInfo;
  23. memset(&t_logInfo,0,sizeof(T_SysLogInfo));
  24. t_logInfo.userId = userInfo.iUserId;
  25. t_logInfo.logType = tType;
  26. va_list arglist;
  27. va_start(arglist, pcFormat);
  28. vsnprintf(t_logInfo.logContent,sizeof(t_logInfo.logContent),pcFormat,arglist);
  29. va_end(arglist);
  30. if ( m_pLogManage->SendMessage(ADD_SYS_LOG_INFO,(WPARAM)&t_logInfo, (LPARAM)this) == MSG_OK)
  31. {
  32. return true;
  33. }
  34. return false;
  35. }

打赏

微信支付 支付宝支付

License

本作品由Simonhttp://www.uusystem.com)创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示此声明以及原文链接。如您有任何疑问或者授权方面的协商,请邮件:postmaster@uusystem.com。