十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
C/C++中的Split函數(shù)是strtok()其函數(shù)原型如下:
為察布查爾錫伯等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及察布查爾錫伯網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、察布查爾錫伯網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
char
*
strtok
(char
*
str,
const
char
*
delimiters);
函數(shù)說明
strtok()用來將字符串分割成一個(gè)個(gè)片段。參數(shù)str指向欲分割的字符串,參數(shù)delimiters則為分割字符串,當(dāng)strtok()在參數(shù)str的字符串中發(fā)現(xiàn)到參數(shù)delimiters的分割字符時(shí)則會(huì)將該字符改為'\0'字符。在第一次調(diào)用時(shí),strtok()必需給予參數(shù)str字符串,往后的調(diào)用則將參數(shù)str設(shè)置成NULL。每次調(diào)用成功則返回下一個(gè)分割后的字符串指針。
返回值
返回下一個(gè)分割后的字符串指針,如果已無從分割則返回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;
}
本例中,實(shí)現(xiàn)對(duì)字符串'a,b,c,d*e"用逗號(hào)(,)來作界定符對(duì)字符串進(jìn)行分割。
輸出結(jié)果將如下所示:
a
b
c
d*e
因?yàn)閐elimiters支持多個(gè)分割符,
我們將本示例中的語句行
const
char
*
split
=
",";
改成
const
char
*
split
=
",*";
//用逗號(hào)(,)和星號(hào)(*)對(duì)字符串進(jìn)行分割
這樣輸出結(jié)果將如下所示:
a
b
c
d
e
可以寫一個(gè)分割函數(shù),用于分割指令,比如cat a.c最后會(huì)被分割成cat和a.c兩個(gè)字符串、mv a.c b.c最后會(huì)被分割成mv和a.c和b.c三個(gè)字符串。
參考代碼如下:
#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中,并返回子字符串?dāng)?shù)量
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;
}
根據(jù)單個(gè)分隔字符用split截取
string st="GT123_1";
string[] sArray=st.split("_");
即可得到sArray[0]="GT123",sArray[1]="1";
2.利用多個(gè)字符來分隔字符串
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根據(jù)字符串或字符串組來截取字符串
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個(gè)字符開始的長(zhǎng)度為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;
//將讀入的字符串轉(zhuǎn)化成is流
istringstreamis(s);
intinter;
charch;
while(isinter)//只能讀出is流中的一個(gè)整形讀進(jìn)inter
{
v.push_back(inter);
isch;//然后讀一個(gè)字符型讀進(jìn)ch
}
for(inti=0;iv.size();i++)
coutv[i]"";
coutendl;
return0;
}
擴(kuò)展資料
C語言的字符串按照指定字符串分割操作
#includestdio.h
#pragmawarning(disable:4996)
#includestdlib.h
intmain()
{
charstr[]="我,是,中國(guó),程序員";
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();
}