C++ 向字符串中添加字符

C++ 向字符串中添加字符,c++,C++,我有一个问题 #include <iostream> using namespace std; int main(){ string word; cout << "Enter word: "; cin >> word; int i = 0; do { if (word.at(i) == 'a') { word.at(i) += 'r'; } i+

我有一个问题

#include <iostream>

using namespace std;

int main(){
    string word;
    cout << "Enter word: ";
    cin >> word;
    int i = 0;
    do {
        if (word.at(i) == 'a') {
            word.at(i) += 'r';
        }
        i++;
    } while(i < word.size());
    cout << word << endl; 
    return 0;
}
#包括
使用名称空间std;
int main(){
字符串字;
cout>单词;
int i=0;
做{
如果(单词at(i)=‘a’){
at(i)+='r';
}
i++;
}而(i'a'
的数字表示添加到
'r'
中,并将其存储在索引
i
中。假设结果适合您平台上的
字符类型

您可以将其复制到字符串中的特定位置,但只使用一个新字符串可能会更好:您可以将字符串的每个字符复制到另一个字符串(动态追加一个额外字符)

std::字符串字;
std::字符串新词;
std::cout>word;
for(int i=0;i'a'
的数字表示形式添加到
'r'
中,并将其存储在索引
i
中。假设结果符合平台上的
char
类型

您可以将其复制到字符串中的特定位置,但只使用一个新字符串可能会更好:您可以将字符串的每个字符复制到另一个字符串(动态追加一个额外字符)

std::字符串字;
std::字符串新词;
std::cout>word;
for(int i=0;iword.at(i)+='r'正在将位置
i
处的字符更改为不同的值。将
r
插入到字符串中是而不是

如果
char
在您的平台上是
signed
,则根据您的编码,程序的行为是未定义的,因为将
'r'
添加到
'a'
可能会使
signed
类型溢出
'a'
'r'
只是
char
类型的数字文本。为了方便起见,提供了这种表示法,以使代码清晰、可移植

如果要插入实际字符,请使用
std::string::insert

word.insert(word.begin() + ++i, 'r');
要做到这一点,我已注意再次递增
I
,跳过刚才添加的字符

参考文献:

word.at(i)+='r'正在将位置
i
处的字符更改为不同的值。将
r
插入到字符串中是而不是

如果
char
在您的平台上是
signed
,则根据您的编码,程序的行为是未定义的,因为将
'r'
添加到
'a'
可能会使
signed
类型溢出
'a'
'r'
只是
char
类型的数字文本。为了方便起见,提供了这种表示法,以使代码清晰、可移植

如果要插入实际字符,请使用
std::string::insert

word.insert(word.begin() + ++i, 'r');
要做到这一点,我已注意再次递增
I
,跳过刚才添加的字符


引用:

您没有在字符串中插入任何内容。实际上,您调用的是character元素的
+=
操作符,而不是字符串的操作符(无论如何只能在末尾追加)

实际上,您要做的是在字符串中插入一个元素。在您的示例中,最简单的方法是替换

word.at(i)+='r';

在找到的
'a'
后面插入一个
'r'


但是,请注意,以这种方式插入字符可能会由于可能的重新分配而使字符串中的任何迭代器无效。这在您的情况下不是问题,因为您使用基于索引的迭代,并在每次迭代中检查字符串的大小(可能增加),但这是值得记住的。

您没有在字符串中插入任何内容。实际上,您调用的是character元素的
+=
操作符,而不是字符串的操作符(无论如何只能在末尾追加)

实际上,您要做的是在字符串中插入一个元素。在您的示例中,最简单的方法是替换

word.at(i)+='r';

在找到的
'a'
后面插入一个
'r'

但是,请注意,以这种方式插入字符可能会由于可能的重新分配而使字符串中的任何迭代器无效。这在您的情况下不是问题,因为您使用基于索引的迭代,并在每次迭代中检查字符串的大小(可能增加),但这是值得记住的。

您应该使用

下面是适用于您的示例的代码:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string word;
    cout << "Enter word: ";
    cin >> word;
    int i = 0;
    do {
        if (word.at(i) == 'a') {
            word.insert(i + 1, "r");
        }
        i++;
    } while (i<word.size());
    cout << word << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
字符串字;
cout>单词;
int i=0;
做{
如果(单词at(i)=‘a’){
插入(i+1,“r”);
}
i++;
}而(i你应该使用

下面是适用于您的示例的代码:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string word;
    cout << "Enter word: ";
    cin >> word;
    int i = 0;
    do {
        if (word.at(i) == 'a') {
            word.insert(i + 1, "r");
        }
        i++;
    } while (i<word.size());
    cout << word << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
字符串字;
cout>单词;
int i=0;
做{
如果(单词at(i)=‘a’){
插入(i+1,“r”);
}
i++;

}而(i在首次出现后插入

auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    word.insert(i + 1, insert);
    return;
  }
auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    i = word.insert(i + 1, insert);
    e = word.end();
  }
自动搜索='a';
自动插入='b';
for(自动i=word.begin(),e=word.end();i
在每次出现后插入

auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    word.insert(i + 1, insert);
    return;
  }
auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    i = word.insert(i + 1, insert);
    e = word.end();
  }
自动搜索='a';
自动插入='b';
for(自动i=word.begin(),e=word.end();i
首次出现后插入

auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    word.insert(i + 1, insert);
    return;
  }
auto search = 'a';
auto insert = 'b';
for(auto i = word.begin(), e = word.end(); i < e; ++i)
  if(*i == search) {
    i = word.insert(i + 1, insert);
    e = word.end();
  }
自动搜索='a';
自动插入='b';
for(自动i=word)
std::string word{"HelloXoce"};

std::cout << "Word: " << word << std::endl;
word.at(0) = 'X';
std::cout << "Word: " << word << std::endl;
word.insert(1, "!");
std::cout << "Word: " << word << std::endl;