常用的字符串分割方法

起因:前段时间写命令行解析函数(字符串分割比较通用的例子),没有经过深入思考和分析引起了程序死循环,就想了下是否有对应的系统函数可以使用。经过一番搜索之后发现还是有几个可用的字符串分割函数,这里整理下,以作总结及后续查询使用。

当然,如果你觉得自己的字符串处理可以做的很好,可以考虑直接使用字符串查找函数做字符串分割,比如c中的字符串查找函数、CString字符查找函数、string字符查找函数等,更原始点可以直接操作内存。

windows下有以下几种可用的字符串分割方法。

CString::Tokenize()

用法如下。

// 按照token分割source字符串,结果通过cout输出
// 使用MFC的CString::Tokenize
void SplitUseTokenize(const char * source, char token)
{

	CString strSource = source;
	CString strToken(token);

	int pos = 0;

	while (-1 != pos)
	{
		CString strCur = strSource.Tokenize(strToken, pos);

		if (!strCur.IsEmpty())
		{
			cout << strCur << endl;
		}
	}

	cout << endl << endl;
}

Tokenize函数将分割好的字串放到返回值中,同时将对应的扫描位置放到第二个参数中,如果第二个参数返回-1,表示分割完成。

AfxExtractSubString()函数

// 按照token分割source字符串,结果通过cout输出
// 使用MFC中的AfxExtractSubString函数
void SplitUseExtract(const char * source, char token)
{
	int pos = 0;
	CString strCur = "";
	while(AfxExtractSubString(strCur, source, pos, token))
	{
		++pos;
		cout << strCur << endl;
	}

	cout << endl << endl;
}

 AfxExtractSubString函数返回值表示是否提取子串成功,还有几个重载函数,可以参考msdn上的说明。

提取得到子串放到第一个参数中。 

c语言的strtok()函数

// 按照token分割source字符串,结果通过cout输出
// 使用crt的strtok函数
void SplitUseStrtok(char * source, char token)
{
	char * ptr = strtok(source, &token);
	while(NULL != ptr)
	{
		cout << ptr << endl;
		ptr = strtok(NULL, &token);
	}
}

strtok函数不是线程安全的,不是可重入的,需要线程安全的函数,建议使用strtok_r函数。具体用法可参考c语言用户手册。

这里需要说明的是:

CString::Tokenize()中的PCXSTR pszTokens为分隔字符的组合,可为多个字符。

AfxExtractSubString()中的分隔字符,只能是一个字符。

另外有一点要注意:

CString::Tokenize()碰到连续多个分隔字符是作为一个处理的,AfxExtractSubString()中多个分隔符可区分处理。

strtok/strtok_r函数的处理逻辑跟CString::Tokenize()类似。

如果使用下面测试程序,输出如下:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// 初始化 MFC 并在失败时显示错误
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: 更改错误代码以符合您的需要
		_tprintf(_T("错误: MFC 初始化失败\n"));
		nRetCode = 1;
	}
	else
	{
		// TODO: 在此处为应用程序的行为编写代码。
		char source[] = "123\n\n456\n789";
		char token = ‘\n‘;
		SplitUseTokenize(source, token);
		SplitUseExtract(source, token);
		SplitUseStrtok(source, token);

		system("pause");
	}

	return nRetCode;
}

  

这个输出也说明了本文中提及的注意事项问题。

注:本文涉及所有代码可使用Git直接下载:https://git.oschina.net/Tocy/SampleCode.git。实际代码位于Console目录下,名称为“20150709_StringSplit.cpp”。

时间: 2024-11-03 22:29:54

常用的字符串分割方法的相关文章

总结下哪些我们常用或不常用的字符串处理方法

我们经常的用的字符串的处理方法,有哪些的?常用不常用的都有,有必要总结下 1, charAt:可返回指定位置的字符; <script type="text/javascript"> 返回值“e” var str="Hello world!" document.write(str.charAt(1)) </script> 2,charCodeAt:方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. 

c++字符串分割方法

平常做项目都是用java语言,搞毕业论文的时候,需要用到opengl,而opengl和c++的关系很密切并且参考资料也比较丰富,在程序开发的过程用中到了字符串分割,查api竟然没有找到自带的split函数,在这里记录一下c++字符串分割方法. static void split(const string& src, const string& separator, vector<string>& dest) { string str = src; string subs

字符串分割方法

public static String[] split(String str, String limit) { List<String> result = new ArrayList<String>(); char[] chars = limit.toCharArray(); int length = str.length(); int slice = chars.length - 1; int match = 0, start = 0, count = 1; for (int

C++常用字符串分割方法

一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串,delim为分隔符字符串. 返回值:从str开头开始的一个个被分割的串.当没有被分割的串时则返回NULL. 其它:strtok函数线程不安全,可以使用strtok_r替代. //借助strtok实现split #include <string.h> #include <stdio.h>

C++常用字符串分割方法(转)

1.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串,delim为分隔符字符串. 返回值:从str开头开始的一个个被分割的串.当没有被分割的串时则返回NULL. 其它:strtok函数线程不安全,可以使用strtok_r替代. 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //借助strtok实现sp

ASP.NET中常用的字符串分割函数

asp.net字符串分割函数用法 先来看个简单的实例 但是其数组长度却是25,而不是3.下面这种方法是先将“[111cn.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面我要根据[111cn.net]分割的话 代码如下 复制代码 string[] arrstr2 = str.Replace("[111cn.net]", "$").Split('$'); 好了看其它方法最简单最常用的方法,以一个指定的字符进行的分割 打开vs.net新建一个

Python字符串分割方法总结

Python中字符串分割的常用方法是直接调用字符串的str.split方法,但是其只能指定一种分隔符,如果想指定多个分隔符拆分字符串需要用到re.split方法(正则表达式的split方法). str.split 字符串的split方法函数原型如下,其中sep为指定的分隔符,maxsplit为最大分割次数: 1 str.split(sep=None, maxsplit=-1) 默认情况下,不指定分隔符时则以空白字符(空格,回车,制表符等)作为分隔符拆分字符串: 1 2 3 4 >>> s

常用的字符串的方法

charAt()            返回指定位置的字符串的字符,参数是这个字符在字符串中的位置 eg:   str.charAt(2)  返回字符串中位置是2的字符,字符串都是从0开始 charCodeAt()   返回指定位置的字符的 Unicode 编码 eg:   str.charCodeAt(0)  返回字符串中位置是2的字符的 Unicode 编码 ,字符串都是从0开始 concat()            用于连接两个或多个字符串,返回一个新的字符串,参数可以是多个字符串 in

C++常用字符串分割

C++常用字符串分割方法实例汇总,包括了strtok函数.STL.Boost等常用的各类字符串分割方法,非常具有实用价值,需要的朋友可以参考下本文实例汇总了C++常用字符串分割方法,分享给大家供大家参考.具体分析如下:我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用.一.用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串.参数说明:str为要分解的字符串,deli