#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" #define DOFREE(obj) \ { \ if(obj) \ { \ MEM_free(obj); \ obj = NULL; \ } \ } std::vector split2(const std::string &str, const std::string &pattern) { std::vector resVec; if ("" == str) { return resVec; } //方便截取最后一段数据 std::string strs = str + pattern; size_t pos = strs.find(pattern); size_t size = strs.size(); while (pos != std::string::npos) { std::string x = strs.substr(0, pos); resVec.push_back(x); strs = strs.substr(pos + pattern.size(), size); pos = strs.find(pattern); } return resVec; }; std::vector split(const std::string &str, const std::string &pattern) { std::vector resVec; if ("" == str) { return resVec; } //方便截取最后一段数据 std::string strs = str + pattern; size_t pos = strs.find(pattern); size_t size = strs.size(); while (pos != std::string::npos) { std::string x = strs.substr(0, pos); resVec.push_back(x); strs = strs.substr(pos + pattern.size(), size); pos = strs.find(pattern); } return resVec; }; //分割字符串 void split(char *src, const char *separator, char **dest, int *num) { vector resultVector = split(src, separator); int count = 0; for (auto result : resultVector) { int nLen = strlen(result.c_str()); char *pCh = new char[nLen + 1]; strcpy(pCh, result.c_str()); dest[count] = pCh; ++count; } *num = count; ///* //src 源字符串的首地址(buf的地址) //separator 指定的分割字符 //dest 接收子字符串的数组 //num 分割后子字符串的个数 //*/ //char *pNext; //int count = 0; //if (src == NULL || strlen(src) == 0) //如果传入的地址为空或长度为0,直接终止 // return; //if (separator == NULL || strlen(separator) == 0) //如未指定分割的字符串,直接终止 // return; ////printf("分割前的字符=======================%s\n", src); //pNext = strtok(src, separator); //必须使用(char *)进行强制类型转换(虽然不写有的编译器中不会出现指针错误) //while (pNext != NULL) { // //printf("分割后的字符=======================%s\n", pNext); // dest[count] = pNext; // ++count; // pNext = strtok(NULL, separator); //必须使用(char *)进行强制类型转换 //} //*num = count; } char* U2G(const char* utf8) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL); if (wstr) { delete[] wstr; wstr = NULL; } return str; } void removeChar(char* str, char c) { char *tmp = str; //定义tmp,临时存储str的字符串; int i = 0; while (*tmp) //当tmp指向字符串末尾‘\0’时结束循环 { if (*tmp != c) //判断字符是否为空格,不是则将该字符存到str中; { str[i++] = *tmp; } tmp++; } str[i] = '\0'; //字符串用结束符标识 //puts(str); //输出得到的新字符串 //DOFREE(tmp); } /********************************************************************** * 函数名称: 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; //返回地址之差 } void stringToLenth(int value, int num, char ** result) { string num_str = to_string(value); if (num_str.size() > num) { num_str = num_str.substr(0, num); } else { while (num_str.size() < num) { num_str = "0" + num_str; } } char * resultValue = new char[num]; strcpy(resultValue, num_str.c_str()); *result = resultValue; } bool count(vector values, char * value) { for (auto referencedValue : values) { if (strcmp(referencedValue, value) == 0) { return true; } } return false; } void split(std::string s, const char* delim, std::vector* ret) { size_t last = 0; size_t index = s.find(delim, last); int size = strlen(delim); while (index != std::string::npos) { ret->push_back(s.substr(last, index - last)); last = index + size; index = s.find(delim, last); } if (index - last > 0) { ret->push_back(s.substr(last, index - last)); } } void vecToArray(vector &vec, char ***arr) { (*arr) = (char **)MEM_alloc(vec.size()*sizeof(char *)); for (auto i = 0; i vec,char * str) { for each (string s in vec) { if (stricmp(s.c_str(), str) == 0) { return true; } } return false; } char* G2U(const char* gb2312) { int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len); len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL); if (wstr) delete[] wstr; return str; }