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

测试环境:

    操作系统: 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语言版Tokenize()函数,由分隔符获取字符串_第1张图片





注: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++,字符串处理函数)