操作系统: Windows10 64位
运行环境: Visual Studio 10
/*************************************************************** /* 函 数 名:Tokenize /* 函数功能:C语言版Tokenize(),类似MFC/VC++中的CString类的方法 /* Tokenize(),搜索分隔符,返回分隔符前的字符串,每一次 * 搜索结束后uPos保存分隔符的下一个位置 /* 参 数: /* str :源字符串 /* c :分隔符或者其他指定字符 /* uPos :搜索分隔符的起始位置,第一次从零开始 /* 返 回 值: /* 返回分隔符前的字符串 /* /* 依赖的头文件: /* #include <stdlib.h> /* #include <string.h> /* /* 作 者:X攻城狮 /* 日 期:2015年11月5日 /***************************************************************/ char* Tokenize(const char *str, const char c, unsigned int * const uPos) { unsigned int uLen = strlen(str); if(*uPos >= uLen) { return ""; } char *strRet = (char *)malloc(uLen + 1 - *uPos); memset(strRet, 0, uLen+1); unsigned int i = *uPos; for(i=*uPos; i<uLen+1; i++) { if(str[i] != c) { strRet[i-*uPos] = str[i]; } else { break; } } strRet[i-*uPos] = '\0'; *uPos = i+1; return strRet; }
#include <stdio.h> #include <stdlib.h> #include <string.h> /*************************************************************** /* 函 数 名:Tokenize /* 函数功能:C语言版Tokenize(),类似MFC/VC++中的CString类的方法 /* Tokenize(),搜索分隔符,返回分隔符前的字符串,每一次 /* 搜索结束后uPos保存分隔符的下一个位置 /* 参 数: /* str :源字符串 /* c :分隔符或者其他指定字符 /* uPos :搜索分隔符的起始位置,第一次从零开始 /* 返 回 值: /* 返回分隔符前的字符串 /* /* 依赖的头文件: /* #include <stdlib.h> /* #include <string.h>/* /* /* 作 者:X攻城狮 /* 日 期:2015年11月5日 /***************************************************************/ char* Tokenize(const char *str, const char c, unsigned int * const uPos) { unsigned int uLen = strlen(str); if(*uPos >= uLen) { return ""; } char *strRet = (char *)malloc(uLen + 1 - *uPos); memset(strRet, 0, uLen+1); unsigned int i = *uPos; for(i=*uPos; i<uLen+1; i++) { if(str[i] != c) { strRet[i-*uPos] = str[i]; } else { break; } } strRet[i-*uPos] = '\0'; *uPos = i+1; return strRet; } int main() { char strTest[1024] = "wer,qsd,54543,5345,dad,523fs,532rwt4,"; char strResult[1024] = "NULL"; unsigned int uPos = 0; while(strcmp(strResult,"")) { strcpy(strResult, Tokenize(strTest, ',', &uPos)); if(strcmp(strResult,"")) { printf("返回结果:%s\n",strResult); } } return 0; }