Keep on going, never give up.

C/C++字符串分割实例

编写C++程序时,经常会遇到字符串分割,本文给出两个实例,更多的方法咱就不提了,因为分割字符串这事本身就很简单,而且功能独,把简单的问题搞复杂了总不太好。

一、使用strtok函数分割

函数原型:

char * strtok ( char * str, const char * delimiters );

这个函数是传统的C字符串处理函数,包含在<string.h>里,相比下文的C++函数要简单。详细参考:

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

其中,str为输入的字符串,delimiters为分割字符,如果想支持多个字符分割,可以一并写道delimiters里,比如凡是遇到点号或逗号的都进行分割,就可以写成".,"样式。

直接看例子更好懂:

 #include <string.h>
 #include <stdio.h>
 
 int main()
 {
	char str[] ="|a|b|c|";
  	char *pch;
  	pch = strtok (str,"|");
 	printf("---\n");        	
 	while (pch != NULL) {
    		printf ("%s\n",pch);
    		pch = strtok (NULL, "|");
  	}
	printf("---\n");
 	return 0;
 }

上例输出:

  • ---
  • A
  • B
  • C
  • ---

二、用std::string模板结合stl方式分割

 

实例如下:

int main() {
	
	std::string str = "|A|B|C|";
	std::string pattern = "|";
	std::vector<std::string> res;
	std::string::size_type pos;

	str+=pattern;
	int size=str.size();
	
	for(int i=0; i<size; i++) {
		pos=str.find(pattern,i);
		if(pos<size) {
			std::string s=str.substr(i,pos-i);
			res.push_back(s);
			i=pos+pattern.size()-1;
		}
	}	
		
	for(i=0; i<res.size(); i++) {
		std::cout<<res[i]<<std::endl;
	}
	return 0;
}

上例输出:

  • ---
  •  
  • A
  • B
  • C
  •  
  • ---

注意多了两个空行,如果需排除空需进一步处理。

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.