【问题标题】:C++: Replace character in a string with more than one number? [duplicate]C++:用多个数字替换字符串中的字符? [复制]
【发布时间】:2014-06-27 05:56:36
【问题描述】:

我目前正在尝试用多个数字替换字符串中的单个字符。让我们快点:

replace(string.begin(), string.end(), 'a', '1');

^ 工作! ^

replace(string.begin(), string.end(), 'a', '11');

或

replace(string.begin(), string.end(), 'a', "1");

^ 不起作用! ^

我该怎么做?有什么功能吗?

注意: 我不是在问如何:

  • 用另一个字符串替换部分字符串
  • 用另一个子字符串替换子字符串

【问题讨论】:

  • 旁白:'11' 是一个多字符文字,类型为int。它很可能不是你想象的那样。
  • 顺便说一句,这个问题甚至不是那些“已经回答”的问题的一部分!你们还能读书吗?

标签: c++


【解决方案1】:

您应该使用类std::basic_string 的一些重载成员函数replace,而不是标准算法std::replace。

例如

for ( std::string::size_type pos = 0;
      ( pos = s.find( 'a', pos ) ) != std::string::npos;
      pos += 2 )
{
   s.replace( pos, 1, 2, '1' );
}

或者如果数字可以是任意字符串,那么你可以写

std::string number( "123" );
for ( std::string::size_type pos = 0;
      ( pos = s.find( 'a', pos ) ) != std::string::npos;
      pos += number.size() )
{
   s.replace( pos, 1, number );
}

如果你想用一个字符替换一个数字,那么你可以写

for ( std::string::size_type pos = 0;
      ( pos = s.find( "11", pos ) ) != std::string::npos;
      ++pos )
{
   s.replace( pos, 2, 1, 'a' );
}

【讨论】:

  • 第一个有效!非常感谢人! :)
  • Emm... 我怎样才能反过来呢?喜欢数字到字母?示例:'a' 到 123 然后 123 到 'a'?
  • 没关系,我已经想通了。再次感谢:)
  • @Marwan Ansari 查看我更新的帖子。一般来说,您应该一起使用成员函数查找和替换类 std::string。
【解决方案2】:

您需要提供与要替换的值和替换值相同类型的参数。

'a' 是一个char,而"1" 是一个字符串。这两者不能混用,replace 在这种情况下只支持chars。

注意:'11' 不是有效字符。

【讨论】:

  • 这解释了为什么 OP 的方法不起作用。但他在寻求一种方法来实现他想要的。
  • 关于您的编辑:'11' 可能对某些实现有效。 See this question for example.
  • @lethal-guitar 它是 int 类型,而不是 char 类型。
  • @AdamS 很公平。不过,它可能会编译而不会出错。我要补充一点,它是一个“多字符文字”。
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多