繁体   English   中英

使用C ++ 11范围替换字符串中的所有字符

[英]Using C++11 Range For To Replace All Characters In A String

我是C ++的新手,通过一本书来学习并学习一些很棒的东西。 但是,我严重依赖其中一个练习,我无法理解这个原理。

这个问题要求我使用新的Range For语句将字符串中的所有字符(“Hello World”)更改为字母X.

通过输入以下代码,我成功获得了正确的输出:

 string initial ("Hello World!");
 for (auto &initChange : initial)
     cout << "X";

但是我知道这个代码远非正确,因为一个例子是将同一个字符串中的所有文本更改为大写使用以下内容:

string s("Hello World!!!");
for (auto &c : s)
    c = toupper(c);
cout << s << endl;

我理解这段代码,但是为了练习的目的,我无法得到它的变体。

我现在已经把头发拉了2天才发现这个简单的事情。 任何帮助将不胜感激!

一个简单的任务应该工作:

std::string initial ("Hello World!");
for (auto& c: initial) {
    c = 'X';
}
std::cout << initial << '\n';

请注意, c = "X"将不起作用,因为"X"的类型为char const[2] (退化为char const* ),而c的类型为char 'X'具有适当的类型: char

您的代码提供了正确的输出,但没有做正确的事情。 它会打印X,但不会更改字符串。

循环中的迭代变量( initChange )是对字符串元素(字符)的引用; 每个iteraton,它引用字符串中的下一个字符。 您可以使用此引用来修改字符串中的字符(就像toupper()示例一样):

string initial ("Hello World!");
for (auto &initChange : initial)
  initChange = 'X';
cout << initial;  //verify the original string is changed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM