重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C/C++中的Split函数是strtok()其函数原型如下:
为察布查尔锡伯等地区用户提供了全套网页设计制作服务,及察布查尔锡伯网站建设行业解决方案。主营业务为网站设计制作、成都网站建设、察布查尔锡伯网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
char
*
strtok
(char
*
str,
const
char
*
delimiters);
函数说明
strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值
返回下一个分割后的字符串指针,如果已无从分割则返回NULL。
示例-1
/*
strtok
example
*/
#include
stdio.h
#include
string.h
int
main
()
{
char
str[]
="a,b,c,d*e";
const
char
*
split
=
",";
char
*
p;
p
=
strtok
(str,split);
while(p!=NULL)
{
printf
("%s\n",p);
p
=
strtok(NULL,split);
}
getchar();
return
0;
}
本例中,实现对字符串'a,b,c,d*e"用逗号(,)来作界定符对字符串进行分割。
输出结果将如下所示:
a
b
c
d*e
因为delimiters支持多个分割符,
我们将本示例中的语句行
const
char
*
split
=
",";
改成
const
char
*
split
=
",*";
//用逗号(,)和星号(*)对字符串进行分割
这样输出结果将如下所示:
a
b
c
d
e
可以写一个分割函数,用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。
参考代码如下:
#include stdio.h
#includestring.h
#define MAX_LEN 128
void main()
{
int i,length,ct=0,start = -1;
char inputBuffer[MAX_LEN],*args[MAX_LEN];
strcpy(inputBuffer,"mv a.c b.c");
length=strlen(inputBuffer);
for (i = 0; i = length; i++) {
switch (inputBuffer[i]){
case ' ':
case '\t' : /* argument separators */
if(start != -1){
args[ct] = inputBuffer; /* set up pointer */
ct++;
}
inputBuffer[i] = '\0'; /* add a null char; make a C string */
start = -1;
break;
case '\0': /* should be the final char examined */
if (start != -1){
args[ct] = inputBuffer;
ct++;
}
inputBuffer[i] = '\0';
args[ct] = NULL; /* no more arguments to this command */
break;
default : /* some other character */
if (start == -1)
start = i;
}
}
printf("分解之后的字符串为:\n");
for(i=0;ict;i++)
printf("%s \n",args[i]);
}
#include stdio.h
#include string.h
// 将str字符以spl分割,存于dst中,并返回子字符串数量
int split(char dst[][80], char* str, const char* spl)
{
int n = 0;
char *result = NULL;
result = strtok(str, spl);
while( result != NULL )
{
strcpy(dst[n++], result);
result = strtok(NULL, spl);
}
return n;
}
int main()
{
char str[] = "what is you name?";
char dst[10][80];
int cnt = split(dst, str, " ");
for (int i = 0; i cnt; i++)
puts(dst[i]);
return 0;
}
根据单个分隔字符用split截取
string st="GT123_1";
string[] sArray=st.split("_");
即可得到sArray[0]="GT123",sArray[1]="1";
2.利用多个字符来分隔字符串
tring str = "GTAZB_JiangjBen_123";
string[] sArray = str.Split(new char[2] { 'j', '_' });
foreach(string e in sArray)
{
Console.WriteLine(e);
}
得到sArray[0]="GTAZB",sArray[1]="Jiang",sArray[2]="Ben",sArray[3]="123";
3根据字符串或字符串组来截取字符串
string str = "GTAZB_JiangjBen_123";
string[] sArray = str.Split( new string[]{"Ji","jB"}, StringSplitOptions.RemoveEmptyEntries);
foreach(string e in sArray)
{
Console.WriteLine(e);
}
得到sArray[0]="GTAZB_",sArray[1]="ang",sArray[2]="en_123";
4提取字符串中的第i个字符开始的长度为j的字符串;
string str = "GTAZB_JiangjBen_123";
int start=3,length=8;
Console.WriteLine(str.Substring(start-1, length));
#includeiostream
#includevector
#includesstream
usingnamespacestd;
intmain()
{
strings;
vectorintv;
cins;
//将读入的字符串转化成is流
istringstreamis(s);
intinter;
charch;
while(isinter)//只能读出is流中的一个整形读进inter
{
v.push_back(inter);
isch;//然后读一个字符型读进ch
}
for(inti=0;iv.size();i++)
coutv[i]"";
coutendl;
return0;
}
扩展资料
C语言的字符串按照指定字符串分割操作
#includestdio.h
#pragmawarning(disable:4996)
#includestdlib.h
intmain()
{
charstr[]="我,是,中国,程序员";
char*ptr;
char*p;
printf("开始前:str=%s\n",str);
printf("开始分割:\n");
ptr=strtok(str,",");
while(ptr!=NULL){
printf("ptr=%s\n",ptr);
ptr=strtok(NULL,",");
}
getchar();
}