c++ - 在C++更改N个字符的字符串中每N个字符插入一个字符

标签 c++ string

我正在尝试使用:

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/

相关文章:

c - 如何在 C 中转换字符串?

C++ 正则表达式字符串捕获

c++ - C/C++ 中字符 ('a' ) 的大小

string - (转义)字符串插值中的双引号(在 Swift 中)

string - 字符串中有多少个不同的字母

Python在格式化表达式中对字典进行排序

c++ - 关于特定接口(interface)类型的模板分支

c++ - 从一组字符串派生 RegExp

c++ - 无法使用 opengl 和 sfml 在我的立方体上应用纹理

C++ 将二进制数据转换为十六进制字符串并返回