線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2156
推到 Plurk!
推到 Facebook!

字串切割成個數問題

答題得分者是:alvinken
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-26 10:03:05 IP:211.20.xxx.xxx 訂閱

我有一個String為"18/30 31/40 41/50 "
我想將18 30 31 40 41 50 六個整數依照順序分別存在一個陣列裡面[0]~[5]的位置
我想到的方式是用strtok函數來使用,但是我不懂這函數的用法

所以是否可以請各位教教我該如何使用,或是有更棒的方式

[code cpp]
char *cToken,*cNumToken;
AnsiString asCut[65][10],asFinalCut[65][20];
int iCutCount1,iCutCount2;
int ias1Length,iasPos;
AnsiString asCutNumber;

for(int a=0;a<65;a ){
if(asY_Coordinates[a].Length()==0){
continue;
}
else{
iCutCount1=0;
cToken=strtok(asY_Coordinates[a].c_str()," ");

while(cToken!= NULL){
asCut[a][iCutCount1]=cToken;
iCutCount1 ;
cToken=strtok(NULL," ");
}

iCutCount2=0;
for(int x=0;x
iasPos=asCut[a][x].AnsiPos('/');
if(iasPos==0){
ias1Length=asCut[a][x].Length();
asCutNumber=asCut[a][x].SubString(1,ias1Length);
asCut[a][x]=asCut[a][x] "/" asCutNumber;
}

cNumToken=strtok(asCut[a][x].c_str(),"/");
while(cNumToken!= NULL){
asFinalCut[a][iCutCount2]=cNumToken;
asFinalCut[a][iCutCount2]=asFinalCut[a][iCutCount2].TrimRight();
iCutCount2 ;
cNumToken=strtok(NULL," ");
}
}
}
}
[/code]

這問題我已經自行解決了,但各位大大如有好建議也請告訴我,謝謝
------
lee
編輯記錄
small7011 重新編輯於 2008-06-26 10:04:09, 註解 無‧
small7011 重新編輯於 2008-06-26 16:46:40, 註解 無‧
small7011 重新編輯於 2008-06-26 17:39:49, 註解 無‧
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-26 16:45:09 IP:218.170.xxx.xxx 未訂閱
你那中間是有空格嗎? <br \>

[code cpp]

String Astring = "18/30 31/40....";
char *array[6];

array[0] = strtok(Astring ,"/" ) ;
array[1] = strtok(NULL , " ") ;
array[2] = strtok(NULL , "/");
依此類推....

[/code]


大致上的寫法就是如此,應該看一下就知道了




===================引 用 small7011 文 章===================
我有一個String為"18/30 31/40 41/50 "
我想將18 30 31 40 41 50 六個整數依照順序分別存在一個陣列裡面[0]~[5]的位置
我想到的方式是用strtok函數來使用,但是我不懂這函數的用法

所以是否可以請各位教教我該如何使用,或是有更棒的方式

------
水至清則無魚,人至賤則無敵。
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-26 17:40:56 IP:211.20.xxx.xxx 訂閱
是的~中間是空格!!很謝您的答覆
------
lee
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-28 13:53:50 IP:123.193.xxx.xxx 未訂閱


[code cpp]
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String S = "18/30 31/40 41/50 ", T="";
int N[6], k=0;
for(int i=1;i<=S.Length();i )
if(S[i]>='0'&&S[i]<='9')T =S[i];
else if(k<6&&T!=""){
ListBox1->Items->Add(T);//show token
N[k ]=StrToInt(T);
T="";
}
}
//---------------------------------------------------------------------------
[/code]
hou0935
一般會員


發表:0
回覆:0
積分:0
註冊:2024-02-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2024-02-14 11:33:03 IP:61.223.xxx.xxx 未訂閱
另一個方法:使用 TStringListDynamicArray
[code cpp]
String s = "18/30 31/40 41/50 ";
TStringList *sList = new TStringList();
sList->Delimiter = '/'; // 設定要分割的字元
sList->StrictDelimiter = false; //false: 連續空白字元也是一個分割
sList->DelimitedText = s;
DynamicArray < String > ar1;
for(int i=0;iCount; i){
ar1.Length ;
ar1[ar1.Length-1]=sList->Strings[i];
}
delete sList; sList=nullptr;
[/code]
------
David Hou
編輯記錄
hou0935 重新編輯於 2024-02-14 11:34:26, 註解 無‧
hou0935 重新編輯於 2024-02-14 16:01:10, 註解 無‧
hou0935 重新編輯於 2024-02-26 11:29:38, 註解 無‧
hou0935 重新編輯於 2024-02-26 11:30:12, 註解 無‧
系統時間:2024-05-08 13:53:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!