首页 > 编程知识 正文

c语言分割字符串的方法,c++切割字符串

时间:2023-05-06 05:08:55 阅读:37030 作者:4068

1、基于strtok函数的字符串划分原型: char*strtok(char*str,const char *delim );

功能:将字符串分解为一系列字符串。

参数说明: str是要分解的字符串,delim是分隔符字符串。

返回值:从str开头开始一个接一个分割的字符串。 如果没有拆分的字符串,则返回NULL。

其他: strtok函数线程不安全。 请改为使用strtok_r。

示例:

在strtok中单击split # include string.h # include stdio.hint main ({ chars [ ]=' golden global view,磁盘* desk ' ); const char *d=',* '; char *p; p=strtok(s,d ); while(p ) ) printf ) ' %sn ',p ); p=strtok(null,d ); }返回0; ) 2、substr函数原型: stringsubstr(size_tpos=0,size_t n=npos ) const;

功能:获取子字符串。

参数说明: pos为开始位置(默认值为0 ),n为结束位置(默认值为npos )

返回值:子字符串

# include iostream # include string # include vector//字符串分割函数STD :3360 vectors TD 33603360 stringsplit (STD 3:3: stringstrion str =pattern; 扩展字符串以方便使用int size=str.size (inti=0; i size; I ) {pos=str.find(pattern,I ); if(possize ) STD :3360 strings=str.substr (I,pos - i ); result.push_back(s; i=pos pattern.size ()- 1; } }返回结果; }示例:

int main () { std:string str; STD : cout ' please inputstr : ' STD : endl; //std:cinstr; 栅极线(STD :3360 CIN,str ); std:string pattern; STD : cout ' pleaseinputpattern : ' STD : endl; //std:cinpattern; Getline(STD:CIN,pattern ); 包含//空格的字符串STD :3360 vectors TD :3360 string result=split (str,pattern ); STD : cout ' the result : ' STD : endl; for(intI=0; iresult.size (; I ) STD :3360 cout result [ I ] STD :3360 endl; } std:cin.get (; std:cin.get (; 返回0; } 3、find _ first _ not _ of # include string # include vector # includeiostreamusingnamespacestd; 语音字符串(conststringstr,vectorstring tokens, const string delimiters )//skipdelimitersatbeginning.string 336033666//findfirst ' non-delimiter '.string :360 while(string33603360npos!=pos|||string33603360npos!==lastPos(//foundatoken,addittothevector.tokens.push _ back (str.substr ) lastpos,pos - lastPos ) ); //skip delimiters.note the ' not _ of ' lastpos=str.find _ first _ not _ of (delimiters,pos ); //findnext ' non-delimiter ' pos=str.find _ first _ of (delimiters,lastPos ); }intmain(intargc,char *argv[] () stringstr ) ) (===AAA==BBB=CCC=====' ); vectorstringtokens; Tokenize(str,tokens,'='; for(intI=0; i tokens.size (; I ) { cout tokens[i] endl; }返回0; } 4、用Boost分割字符串用Boost库正则表达式分割字符串

# include iostream # includecassert # include vector # include string # include ' boost/regex.HPP ' STD 3360: vectors TD 3360600 std:string s ) boost 33603360 rings STD :3360 vectors TD :3360 string vec; boost :3360 s regex _ token _ iterator it (str.begin ),str.end ),reg,-1); boost :3360 s regex _ token _ iterator end; wile(it!=end}{vec.push_back(*it ); }返回电压; (}int main ) ) { std:string str,s; str='sss/ddd/ggg/hh '; s='/'; STD : vectors TD :3360 string vec=split (str,s ); for(intI=0,size=vec.size ); isize; I ) STD :3360 cout vec [ I ] STD :3360 endl; } std:cin.get (; std:cin.get (; 返回0; } 5、最近发现了boost附带的split的函数。 如果要使用boost,最好直接使用split。 代码如下。

# include iostream # include string # include vector # include boost/algorithm/string/class ification.HPP # include boost/向量字符串vstr; boost:3360split(vstr,s,boost:is_any_of (,/),boost : token _ compress _ on ); for (vector string :3360 iterator it=vstr.begin ); it!=vStr.end (; it ) { cout *it endl; }返回0; }转载来源:

33559 www.cn blogs.com/happy koukou/p/5427268.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。