我想要一个字符串想要将所有字符更改为"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;
}
我想将所有字符更改为"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) {
if (isspace(line[index])) {
line[index] += 1;
continue;
}
else {
line[index] = 'X';
}
}
cout << line << endl;
return 0;
}
它在字符串之间的空格中打印!
,如何解决。
答案 0 :(得分:6)
使用填充构造函数
line = std::string(line.size(), 'X');
在c ++ 11中,内部缓冲区将被移动,而不是被复制。
但是如果你想避免分配一个新的缓冲区(同时丢弃旧的缓冲区),你会想要同意其中一个答案。
答案 1 :(得分:3)
for(decltype(...))
有兴趣的构造你已经在这里提出。
你可能想尝试这个:
for (char& ch : line)
{
ch = 'X';
}
或者这个:
for(unsigned int i = 0; i < line.size(); i++)
{
line[i] = 'X';
}
另请注意,'X'
和"X"
之间存在差异:
第一个是char字面值,第二个是字符串文字(这意味着返回类型是const char[2]
,与const char
相对)
答案 2 :(得分:2)
将range based for
loop与auto
specifier一起使用(另请参阅this answer):
for (auto& i: line)
i = 'X';
答案 3 :(得分:1)
然而,另一种方法:
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'; } );
但老实说,对于简单的事情,只需使用简单的循环
答案 4 :(得分:1)
首先搜索已经完成您正在尝试的标准库函数总是好的。在这种情况下,std::string.replace
可以解决问题:
#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;
}