【问题标题】:Strange behaviour while adding string to another string in C++ [duplicate]在C ++中将字符串添加到另一个字符串时出现奇怪的行为[重复]
【发布时间】:2021-01-20 21:06:50
【问题描述】:

one2ans"000000"

string ans = "000000";
ans += string("1", one);
cout<<ans<<endl;

输出是:

0000001�

但我想要输出:

00000011

我做错了什么?

【问题讨论】:

  • 你有什么问题?
  • 输出应该是0000011 而不是出现在字符串末尾的奇怪的? 字符。
  • "4) 用s所指向的字符串的前count个字符构造字符串。s可以包含空字符。字符串的长度为count。如果[s,s,行为未定义+ count) 不是有效范围。” en.cppreference.com/w/cpp/string/basic_string/basic_string
  • @ShantanuTripathi 这不是问题。那是一个声明。而且这个说法是错误的。

标签: c++ string stdstring


【解决方案1】:

string("1", one) 并没有按照你的想法去做。它不会重复"1" 字符串one 的次数。相反,它从"1" 复制chars 的第一个one 数量,在这种情况下是'1' 字符和紧随其后的'\0' 空终止符,这是 即将到来的地方从输出中。这不是你想要的。

请改用string(one, '1')。这将复制'1' 字符one 的次数,如您所愿,例如:

ans = "000000";
ans += string(one, '1');
cout << ans << endl;

【讨论】:

  • 如果有人想将“11”附加两次怎么办? string(2, "12") 那么不起作用。还有其他选择吗?
  • @Shantanu string(4, '1')
  • @JohnFilleau 在这种情况下,使用string(one*2, '1') 会更适合这种情况。
  • @ShantanuTripathi 没有 string 构造函数来复制多字符串 N 次,只有一个 char N 次。您可以按照 John 显示的方式使用该构造函数,也可以使用手动循环,例如:for(int i = 0; i &lt; one; ++i) { ans += "11"; }
【解决方案2】:

只需使用 c++ 字符串并使用+ 运算符来连接字符串。

【讨论】:

  • 很确定这就是提问者试图用string("1", one); 做的事情。他们只是把论据弄错了。
猜你喜欢
  • 2012-08-28
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
相关资源
最近更新 更多