strtok 并替换 C++ 中的子字符串

Posted

技术标签:

【中文标题】strtok 并替换 C++ 中的子字符串【英文标题】:strtok and replace a substring in C++ 【发布时间】:2008-11-14 04:55:24 【问题描述】:

如果我有一个字符串“12 23 34 56”

将其更改为“\x12 \x23 \x34 \x56”的最简单方法是什么?

【问题讨论】:

您真的希望字符串在打印出来时显示“\x12 \x23 \x34 \x56”吗?还是您希望它是一个字符串,其中 char 0x12 然后 char 0x23,然后 char 0x34 然后 char 0x56? 更倾向于后者,我最终将一次一个地写入每个字符 0xZZ 的 WriteFile()。 在这种情况下,我相信我在下面(底部)的回答是您需要的解决方案。 【参考方案1】:

你的问题是模棱两可的,这取决于你真正想要什么:

如果您希望结果与以下内容相同:char s[] = 0x12, 0x34, 0x56, 0x78, '\0': 那么你可以这样做:

std::string s;
int val;
std::stringstream ss("12 34 56 78");
while(ss >> std::hex >> val) 
   s += static_cast<char>(val);

之后,你可以用这个来测试它:

for(int i = 0; i < s.length(); ++i) 
    printf("%02x\n", s[i] & 0xff);

将打印:

12
34
56
78

否则,如果您希望您的字符串字面上是“\x12 \x23 \x34 \x56”,那么您可以按照 Jesse Beder 的建议进行操作。

【讨论】:

【参考方案2】:
string s = "12 23 34 45";
stringstream str(s), out;
int val;
while(str >> val)
    out << "\\x" << val << " "; // note: this puts an extra space at the very end also
                               //       you could hack that away if you want

// here's your new string
string modified = out.str();

【讨论】:

它避免了额外的空间,只需在开始之前添加一个“\x”并将while中的行更改为:out 虽然从他的 cmets 看来,他想要一个字符为 0x12、0x34、0x56、0x78 的字符串,而不是包含“\x12 \x34 \x56 \x78”的字符串。【参考方案3】:

你可以这样做:

foreach( character in source string)

  if 
    character is ' ', write ' \x' to destination string
  else 
    write character to destination string.

我建议使用 std::string 但这可以通过首先检查字符串来计算有多少空格然后创建新的目标字符串来轻松完成。

【讨论】:

以上是关于strtok 并替换 C++ 中的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

C语言中如何用一个字符串替换一个主串中的子串

C语言如何实现分割字符串为一个个单独的字符并保存

2022华为机试真题 C++ 实现 字符串子序列II

PB中取字符串子串的函数是啥

sql server 里类似replace的字符串子串删除