穿行,
ss << s[0];
第一個字符進入輸出流
for (int i = 1;
在1
i < s.size();
開始,一直持續到你達到或超過該字符串的結尾
i++)
看看每個元素的數組
ss << '|' << s[i];
放於|並將當前字符輸入到輸出流中。
所以對於 「ABC」 的循環將展開到:
ss << A; //ss << s[0];
ss << | << B; //ss << '|' << s[1];
ss << | << C; //ss << '|' << s[2];
流內容是A | B | C
for (int i = 1; i < s.size(); i+=16)
手段看一下第二個元素,每16個元素的字符串中後。換句話說,S [1],S [17],S [33],S [49] ...
所以對於 「sqdfqdfqwerqwer」 你把它展開爲:
ss << s; //ss << s[0];
ss << | << q; //ss << '|' << s[1];
而且只有有字符串中有15個字符,所以沒有17個字符。輸出是:
s|q
正如OP注意到的那樣。
好的。上次搞砸了,所以拿兩個。這可以通過串聯字符串而不用字符串緩衝區來完成,但stringstream可能是更快的選擇。不過,我不得不通過個人資料來證明這一點。我也做了一個快速的調整,允許調用者指定長度。它是用於測試,所以我把它在
std::string tokenize(const std::string& s,
size_t where)
{
if (s.size() > 0)
{
std::stringstream temp;
temp << s.substr(0,where);
for (size_t loc = where; loc < s.size(); loc+=where)
{
temp << '|' << s.substr(loc,where);
}
return temp.str();
}
return "";
}
結果:
In = "I'm the very model of a modern major general"
Out = "I'm the very mod|el of a modern m|ajor general"
你是新來'for'循環? –
是的。我幾天前剛開始使用C++。 –