2012-07-24 15 views
-1

我使用下面的代碼並獲取下面的輸出。C++ strtok:如何獲取並分配

原始的字符串是-CCY 1.2624 Up 0.0006(0.05%) 01:37 [37]

char* pch; 

pch = strtok (buffer," "); 

    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " "); 

    } 

這是我的輸出

CCY 
1.2624 
Up 
0.0006(0.05%) 
01:37 
SGT 
[37] 

如何獲得1.2624並將其分配給一個CSTR這樣我就可以使用它以後像printf什麼何時在while循環之外?

+0

什麼是'cstr'?一個C字符串或一個C++'std :: string'? – pb2q 2012-07-24 17:46:42

+0

你知道它永遠是第二個標記嗎? – 2012-07-24 17:47:09

+1

你知道'strtok'是悲傷和絕望,你應該避免在現代C++代碼中使用它,_right_? – 2012-07-24 17:47:36

回答

1
char* pch; 

pch = strtok (buffer," "); // pch == "CCY" 
// again: 
pch = strtok (NULL, " "); // pch == "1.2624" 

提供的理由buffer可以拆分爲兩個或多個項目

1

由於strtok使用靜態緩衝區,所以需要使用自己的緩衝區創建一個您感興趣的字符串的副本。喜歡的東西:

char* numbuffer = malloc(sizeof(char) * strlen(pch)); 

if (numbuffer != NULL) { 
    strcpy(numbuffer, pch); 
} 

更多的例子:http://www.cplusplus.com/reference/clibrary/cstring/strcpy/

你這樣做是因爲任何後續調用strtok將改變緩衝區的值通過PCH指出

+1

不好回答,一個好的答案會說「不要使用strtok」並且展示如何正確地做到這一點。 – 2012-07-24 18:01:09

+0

問題沒有被問到,「我應該使用strtok嗎?」。保持在範圍內。 – AlcoJaguar 2012-07-24 18:08:39

+1

但迴應「strtok需要一些幫助謝謝」,這是有幫助的,建議反對它。問題是(非常明智)「我怎麼做xyz?」不是「我怎麼用斯托克做xyz?」 – 2012-07-24 18:25:35