我正在尝试使用:
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++
----> i+=16
但失败并使 "sqdfqdfqwerqwer"
成为 "s |q"
有人能找出我的错误吗?
最佳答案
for (int i = 1; i < s.size(); i+=16) { // tried i++ ----> i+=16
ss << '|' << s[i];
}
首先:
but that fails and makes
"sqdfqdfqwerqwer"
become"s|q"
您直接从给定字符串的第 1 个位置 (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];
}
我们遍历字符串的所有字符
检查我们是否处于所需位置。有关模运算符如何工作的更多信息。
如果我们得到所需的职位,就做您想做的事。
现在当我通过
DoesThisAnswerYourQuestion?ImGladItDid.IfNotITriedMybest:D
打印出来
DoesThisAnswerYo|urQuestion?ImGla|dItDid.IfNotITri|edMybest:D
关于c++ - 在C++更改N个字符的字符串中每N个字符插入一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888765/