1:编译环境
[test]$ g++ --version g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [test]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.3 (Maipo)
2:示例代码
/* 文件名: getSubStr.cc * 功能说明:按照指定字符分割字符串,并返回结果 * g++ -o getSubStr getSubStr.cc * gcc -o getSubStr getSubStr.cc 编译环境 [test]$ g++ --version g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [test]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.3 (Maipo) * */ #include <cstdio> #include <stdlib.h> #include <string.h> /* 定义log输出宏 */ #define DEB_LOG(fmat,...) printf("%s:%d_%s()]"fmat"\n", \ __FILE__, __LINE__, __FUNCTION__,##__VA_ARGS__) /* 将字符串以按照指定字符分割,并返回结果 */ /* srcStr :输入参数,源字符串 * splitChar:输入参数,分割字符 * columnLen:输出参数,各子字符串的长度 * columnStr:输入参数,各子字符串 * columnNum:输入出参数,输入最大子字符串的最大个数,输出子字符串的实际个数 */ int getSubStr(char* srcStr, char splitChar, int columnLen[],\ char columnStr[][50], int* columnNum); int main(int argc, char* argv[]) { char srcStr[1024] = ",123,456,789,ab,cd,ef,g,"; int columnLen[20]; char columnStr[20][50]; memset(columnStr, 0x00, sizeof(columnStr)); int columnNum = sizeof(columnLen)/sizeof(int); int ret = getSubStr(srcStr, ',', columnLen, columnStr, &columnNum); if(0 != ret){ DEB_LOG("%s NG", "getSubStr"); return -1; } /* 显示子字符串 */ DEB_LOG("%s", "start show result"); for (int i = 0; i < columnNum; ++i) { DEB_LOG("strVal[%d] = %s", i, columnStr[i]); } return 0; } int getSubStr(char* srcStr, char splitChar, int columnLen[],\ char columnStr[][50], int* columnNum) { if (NULL == srcStr || NULL == columnStr || NULL == columnNum) { return -1; } DEB_LOG("columnStr[%d] = %d", *columnNum-1, sizeof(columnStr[*columnNum-1])); // get value split by ',' char* pStart = srcStr; char* pEnd = NULL; int i = 0; char* bufEnd = pStart + strlen(srcStr); while (pStart < bufEnd) { pEnd = strchr(pStart, splitChar); if (NULL == pEnd) { // last char is not , pEnd = bufEnd; } if (i < *columnNum) { columnLen[i] = pEnd - pStart; memcpy(columnStr[i], pStart, columnLen[i]); } else { DEB_LOG("subStr num > max Num[%d]", *columnNum); return -1; } pStart = pEnd + 1; ++i; } /* 判断最后一个字符是否为分割字符 */ if (splitChar == *(bufEnd - 1)) { if (i < *columnNum) { columnLen[i] = 0; columnStr[i++][0] = '\0'; } else { DEB_LOG("subStr num > max Num[%d]", *columnNum); return -1; } } *columnNum = i; return 0; }
3:输出结果
test.cc:61_getSubStr()]columnStr[8] = 50 test.cc:48_main()]start show result test.cc:50_main()]strVal[0] = test.cc:50_main()]strVal[1] = 123 test.cc:50_main()]strVal[2] = 456 test.cc:50_main()]strVal[3] = 789 test.cc:50_main()]strVal[4] = ab test.cc:50_main()]strVal[5] = cd test.cc:50_main()]strVal[6] = ef test.cc:50_main()]strVal[7] = g test.cc:50_main()]strVal[8] =