我正在尝试使用:
std::string tokenize(const std::string& s) {
if (!s.size()) {
return "";
}
std::stringstream ss;
ss << s[0];
for (int i = 1; i < s.size(); i++) { // tried i++ ----> i+=16
ss << '|' << s[i];
}
return ss.str();
}
来自(How to insert a character every N characters in a string in C++),但将每个字符插入的"|"
更改为每16个字符。
我尝试更改i++
----&gt; i+=16
但失败并使"sqdfqdfqwerqwer"
成为"s|q"
有人能找到我的错误吗?
答案 0 :(得分:3)
for (int i = 1; i < s.size(); i+=16) { // tried i++ ----> i+=16
ss << '|' << s[i];
}
<强>首先强>
但失败并使
"sqdfqdfqwerqwer"
成为"s|q"
你正在从给定字符串的第一个位置(i=1
)跳到第16个位置(i+=16
)。当第二次位置在1+16
位置时循环运行时。
所以ss
正在获取字符串s[0],s[i],s[i+16],s[2i+16]...
这就是为什么你被剥离了字符串s的版本。
<强>解决方案强> 这很简单,已经在上面回答了
for (int i = 1; i < s.size(); i++) {
if (i%16==0) ss << '|'; <<-- this is the main concept you are missing
ss << s[i];
}
我们遍历字符串的所有字符
检查我们是否处于要求的位置。有关Modulo运算符如何工作的更多信息。
如果我们得到你想做的所需职位。
现在我通过
DoesThisAnswerYourQuestion?ImGladItDid.IfNotITriedMybest:D
打印出来
DoesThisAnswerYo|urQuestion?ImGla|dItDid.IfNotITri|edMybest:D
答案 1 :(得分:1)
HTTP/1.1 100 Continue
答案 2 :(得分:1)
我试过改变i ++ ----&gt; i + = 16但是失败了 &#34; sqdfqdfqwerqwer&#34;成为&#34; s | q&#34;
错误是你增加16。你把第一个字符放入流中。然后循环一次,将|
和下一个字符放入流中。然后你增加16,这导致i
大于字符串的大小。因此循环退出并且打印出所提到的结果。
@ kirbyfan64os建议进行修正。快乐的编码。
答案 3 :(得分:1)
走过,
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指出的那样。
行。上次搞砸了,所以拿两个。这可以通过连接字符串在没有字符串缓冲区的情况下完成,但字符串流可能是更快的选择。不过,我不得不去证明这一点。我也做了一个快速调整,允许调用者指定长度。它对测试很有用,所以我把它留在了。
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"