测试环境:

操作系统: 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;
}

测试结果:

注:C语言中本身就有一个分割字符串的函数

原型

char *strtok(char s[], const char *delim);

功能

分解字符串为一组字符串。s为要分解的字符串,delim为 分隔符字符串。
例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。

说明

strtok()用来将字符串分割成一个个片段。参数s指向欲分割的 字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的 指针。

返回值

从s开头开始的一个个被分割的串。当查找不到delim中的字符时,返回NULL。
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

C语言版Tokenize()函数,由分隔符获取字符串相关推荐

  1. c语言分隔符分离出str字符串中的数字,C语言版Tokenize()函数,由分隔符获取字符串...

    测试环境: 操作系统: Windows10 64位 运行环境: Visual Studio 10 函数: /********************************************** ...

  2. C语言中文件初始化,C语言版GetPrivateProfileString()函数,从初始化文件中指定的条目取得字串...

    /*************************************************************** /* 函 数 名:GetPrivateProfileString /* ...

  3. 【SQL】sql版Split函数。用于拆分字符串为单列表格

    [SQL]sql版Split函数.用于拆分字符串为单列表格 功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移 ...

  4. Swift3.0语言教程使用Unicode范式标准化获取字符串

    Swift3.0语言教程使用Unicode范式标准化获取字符串 Swift3.0语言教程使用Unicode范式标准化获取字符串,在NSString中可以使用4个属性去使用Unicode范式标准化获取字 ...

  5. c++语言获得字符长度,c++怎么获取字符串长度?

    C++获取字符串长度 strlen()函数 函数 strlen()是一个常规函数,他接受一个 C-风格字符串作为参数,并返回字符串包含的字符数. 参数必须是字符型指针(char*).当数组名作为参数传 ...

  6. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)

    c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...

  7. C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

    题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...

  8. (C语言)写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2)

    写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2);设p1指向字符串s1,p2指向字符串s ...

  9. c语言 乱码转化为16进制_C语言版的16进制与字符串互转函数

    http://www.cnblogs.com/nio-nio/p/3309367.html /* // C prototype : void StrToHex(BYTE *pbDest, BYTE * ...

最新文章

  1. 主流mes厂商_MES为什么可以成为企业核心
  2. DNS 学习笔记之5- DNS区域详解
  3. SAP UI5 应用开发教程之五十七 - 基于 OData 注解的 Smart Field 使用方法学习试读版
  4. 十、最大熵模型与EM算法
  5. 《交互式程序设计 第2版》一3.6 关系比较
  6. 计算机系统结构结构相关实验报告,计算机系统结构实验报告.doc
  7. 1034 有理数四则运算 (20 分)java
  8. 今天的几点感悟_20160429
  9. 聚合登录平台网站源码
  10. NFV-Bench A Dependability Benchmark for Network Function Virtualization Systems
  11. cnn在nlp应用中的调参建议
  12. 向窗口输入文字--TextOut和DrawText函数
  13. 用html5写个炫酷的3d电子相册
  14. 如何快速制作启动u盘
  15. android手势解锁代码,纯android代码实现九宫格手势密码
  16. linux usb有线网卡驱动_Linux USB网卡驱动安装
  17. 海域使用证换不动产证的步骤和注意问题
  18. openCV中sobel边缘增强
  19. Linux(Ubuntu 22.04)虚拟机共享主机上的文件夹
  20. Android AR ---HelloAR(用的EasyAR 免费版)

热门文章

  1. WPF 控件学习 之 容器控件
  2. freedownloadmanager 下载工具,代替 讯雷
  3. 怎么通过硬盘装linux系统文件下载,通过硬盘上的镜像文件安装Linux操作系统
  4. 【附源码】Java计算机毕业设计家居装修网站(程序+LW+部署)
  5. 平安车险计算器计算2020_人保和平安车险哪个好 人保和平安车险区别有哪些?...
  6. 教你怎么给心爱的她自动定时发送消息!超级简单!
  7. MapReduce NativeTask优化详解
  8. 冰雪之城鸿蒙碎片,冰雪之城——土豪玩法攻略
  9. 进了外包,职业生涯是不是就完了?
  10. 陈鸽:正统或异端_异端的制作:环境艺术