簡體   English   中英

strtok如何處理換行符?

[英]How strtok handles newlines?

我試圖從包含幾行的字符串中讀取數據作為標記。 我使用代碼

    char * pch;
    pch = strtok ((char*)MyStr.c_str()," ,|,\n"); int i = 0;
    while (pch != NULL && i++ < 10)
    {
      cerr << i << ':' << pch << ' ';
      pch = strtok (NULL, " ,.-");
    }

輸入是

std::string SP1271 = "1271,1\n"
"0,44248,8,45040,20,1,0,100\n"
"545,590,603,564,566,598,569,585,586,578\n";

輸出是

1:1271 2:1
0 3:44248 4:8 5:45040 6:20 7:1 8:0 9:100
545 10:590 

使用'\\ n'作為分隔符合法嗎?

使用strtok()是一個非常糟糕的主意,因為此函數可能會更改原始字符串,該字符串不應更改,因為它是const

同樣,即使這可行,您也不會在隨后的strtok()循環中預見到'\\ n'作為令牌分隔符。 因此,最好將所有令牌分隔符字符串對齊。

為什么不使用C ++功能:

size_t pe;
for (size_t pb=0; pe=MyStr.find_first_of(" ,-\n", pb); pb=pe+1)
{
    cout  << MyStr.substr(pb, (pe==string::npos ? pe:pe-pb))<< " ";
    if (pe==string::npos)
        break; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM