C++ 如何在C++;11?

C++ 如何在C++;11?,c++,c++11,C++,C++11,我正在尝试获取一个字符串a,希望将所有字符都更改为“X”,这就是我到目前为止达到的目的 #include<iostream> #include<string> #include<cctype> using namespace std; int main() { string line; getline(cin, line); for (decltype(line.size() index = 0; index != line.siz

我正在尝试获取一个字符串a,希望将所有字符都更改为
“X”
,这就是我到目前为止达到的目的

#include<iostream>
#include<string>
#include<cctype>

using namespace std;

int main() {
    string line;
    getline(cin, line);
    for (decltype(line.size() index = 0; index != line.size(); ++index)) {
        line[index] = "X";
    }
    cout << line << endl;
    return 0;
}

它打印
在字符串之间的空格中,如何解决该问题。

使用填充构造函数

line = std::string(line.size(), 'X');
在c++11中,内部缓冲区将被移动,而不是复制

但是,如果您想避免分配新缓冲区(同时丢弃旧的缓冲区),您需要使用其他答案之一。

使用with(另请参见):

for(decltype(…)

您可能想试试这个:

for (char& ch : line)
{
    ch = 'X';
}
for(unsigned int i = 0; i < line.size(); i++)
{
    line[i] = 'X';
}
或者这个:

for (char& ch : line)
{
    ch = 'X';
}
for(unsigned int i = 0; i < line.size(); i++)
{
    line[i] = 'X';
}
for(无符号int i=0;i

还要注意的是,
'X'
“X”
之间存在差异:
第一个是char-literal,第二个是string-literal(这意味着返回类型是
const-char[2]
而不是
const-char

但是,另一种方法是:

std::for_each(line.begin(), line.end(), [](char& c) { c = 'X'; } );
您甚至可以在此处使用
decltype

std::for_each(s.begin(), s.end(), [](decltype(s[0]) c) { c = 'X'; } );

但老实说,对于简单的事情,只需使用简单循环即可。首先搜索已经完成您试图完成的工作的标准库函数总是很好的。在这种情况下,将执行以下操作:

#include<iostream>
#include<string>

using namespace std;

int main() {
    string line;
    getline(cin, line);
    line.replace(0, line.size(), line.size(), 'X');
    cout << line << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
弦线;
getline(cin,line);
line.replace(0,line.size(),line.size(),'X');

括号不能错,
“X”
应该是
'X'
。除此之外,它应该可以工作。不,如果你有其他问题,请将其作为另一个问题发布。你的问题中的“字符串”是什么意思?你的字符串可能有空格吗你想用“X”替换空白空间吗?还是只想替换字母数字字符?你想用这行来实现什么:行[index ] += 1;写代码时,算法是自记录的,即使在这里,基于循环的范围是如此简单,也可以。<代码> STD::填充(开始(行)、结束(行)、“X”)。
@galop1n实现目标的方法有很多,但我认为对于OP来说,如何按照他想要的方式来做更有趣,因为他似乎缺乏遍历集合的一般知识。这涉及分配,然后移动,或者更糟糕的是,如果存在小字符串优化,则移动内部缓冲区的副本。@galop1n,对于小字符串,内部缓冲区的副本不需要一个感叹号。@galop1n此外,您在对Paranix的评论中发布的解决方案本身非常优雅。您应该将其作为答案发布。我用几个链接改进了我的答案。如果目标只是替换非空格字符,您可以使用
I=isspace(I)i:'X';