首页 > 编程知识 正文

c语言字符串长度怎么算,c语言字符型数组和字符串

时间:2023-05-06 09:57:36 阅读:37075 作者:2732

本文实例总结了c的常用字符串分割方法,供大家参考。 具体分析如下:

我们在编程中经常会遇到字符串分割的问题,但是现在总结一下,以后查一下使用也很方便。

一.基于strtok函数的字符串分割

原型: char*strtok(char*str,const char *delim );

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

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

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

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

示例:

用strtok实现精灵

#包含

#包含

int main () )

{

char s [ ]=' golden全局视图,磁盘* desk ';

const char *d=',* ';

char *p;

p=strtok(s,d );

是while(p )

{

printf(%s(n ),p );

p=strtok(null,d );

}

返回0;

}

执行效果如下图所示。

二.用STL进行字符串分割

与string类相关的两个函数find和substr :

1、find函数原型: size_tfind(conststringstr,size_t pos=0) const;

功能:查找第一个显示子字符串的位置。

参数说明: str为子字符串,pos为初始搜索位置。

返回值:找到后返回第一个出现的位置,否则返回string:npos

2、substr函数原型: stringsubstr(size_tpos=0,size_t n=npos ) const;

功能:获取子字符串。

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

返回值:子字符串

实现如下。

//字符串分割函数

STD :3360 vector : stringsplit (STD :3360 stringstr,std:string pattern ) )。

{

STD : string :3360 size _ type pos;

STD :3360 vector : string result;

str=pattern; //扩展字符串以方便操作

int size=str.size (;

for(intI=0; I

{

POS=str.find(Pattern,I );

if )销售点

{

STD :3360 strings=str.substr (I,pos-i );

result.push_back(s;

i=pos pattern.size ()-1;

}

}

返回结果;

}

完整代码:

/*

File : split1.cpp

Author : Mike

E-Mail : Mike_Zhang@live.com

*/

#包含

#包含

#包含

//字符串分割函数

STD :3360 vector : stringsplit (STD :3360 stringstr,std:string pattern ) )。

{

STD : string :3360 size _ type pos;

STD :3360 vector : string result;

str=pattern; //扩展字符串以方便操作

int size=str.size (;

for(intI=0; I

{

POS=str.find(Pattern,I );

if )销售点

{

STD :3360 strings=str.substr (I,pos-i );

result.push_back(s;

i=pos pattern.size ()-1;

}

}

返回结果;

}

int main () )

{

std:string str;

std:cout

//std:cinstr;

栅极线(STD :3360 CIN,str );

std:string pattern;

std:cout

//std:cinpattern;

Getline(STD:CIN,pattern ); 用于获取包含//空格的字符串

STD : vector : string result=split (str,pattern );

std:cout

for(intI=0; I

{

std:cout

}

std:cin.get (;

std:cin.get (;

返回0;

}

执行效果如下图所示。

三.通过提升进行字符串分割

基于boost库正则表达式的字符串分割

实现如下。

STD :3360 vector : stringsplit (STD :3360 stringstr,std:string s ) )。

{

Boost:3360regexreg(s.c_str );

STD : vector : 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;

}

返回电压;

}

完整代码:

//本程序实现了使用正则表达式分割字符串

//运行环境VC6.0引导库

/*

File : split2.cpp

Author : Mike

E-Mail : Mike_Zhang@live.com

*/

#包含

#包含

#包含

#包含

#include 'boost/regex.hpp '

STD :3360 vector : stringsplit (STD :3360 stringstr,std:string s ) )。

{

Boost:3360regexreg(s.c_str );

STD : vector : 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 :字符串str,s;

str='sss/ddd/ggg/hh ';

s='/';

STD : vector : string vec=split (str,s );

for(intI=0,size=vec.size ); I

{

std:cout

}

std:cin.get (;

std:cin.get (;

返回0;

}

执行效果如下图所示。

补充:

最近发现里面有boost附带的split的函数。 如果要使用boost,最好直接使用split。 这里我不多说,代码如下。

#包含

#包含

#包含

#包含

#包含

用户命名空间STD;

int main () )

{

string s='sss/ddd,ggg ';

向量电压VSTr;

boost:3360split(vstr,s,boost:is_any_of (,/),boost : token _ compress _ on );

for (vector :3360 iterator it=vstr.begin ); it!=vStr.end (; it )

cout *it endl;

返回0;

}

在这篇文章中,我希望对大家的c编程有帮助。

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