С++, лучший способ изменить строку с определенным индексом

Я хочу изменить строку С++ на определенный индекс следующим образом:

string s = "abc";
s[1] = 'a';

Является ли следующий код действительным? Это приемлемый способ сделать это?

Я не нашел ссылку, в которой говорится, что она действительна:

http://www.cplusplus.com/reference/string/string/

Что говорит, что через "перегруженный [] оператор в строке" мы можем выполнить операцию записи.

Ответ 1

Да, следующая программа C++:

#include <iostream>

int main() {
    std::string s = "abc";
    s[1] = 'a';
    std::cout << s;
}

печатает aac. Вы рискуете случайно записать в неназначенную память, если строка s является пустой строкой. C++ позволит вам сделать это, и это приведет к неопределенному поведению.

Безопасный способ сделать это - использовать string::replace: http://cplusplus.com/reference/string/string/replace

Например,

#include <iostream> 
int main() { 
    std::string s = "What kind of king do you think you'll be?"; 
    std::string s2 = "A good king?"; 
    //       pos len str_repl 
    s.replace(40, 1, s2); 
    std::cout << s;   
    //prints: What kind of king do you think you'll beA good king?
}

Функция замены принимает строку s и в позиции 40 заменяет один символ, вопросительный знак, на строку s2.

Ответ 2

Да. На сайте, на котором вы ссылаетесь, есть страница об этом. Вы также можете использовать функцию, которая выполняет проверку границ.

http://www.cplusplus.com/reference/string/string/operator%5B%5D/

Ответ 3

Да, код, который вы написали, действителен. Вы также можете попробовать:

string num;
cin>>num;
num.at(1)='a';
cout<<num;

**Input**:asdf
**Output**:aadf

std:: replace также может использоваться для замены charecter. Вот ссылка http://www.cplusplus.com/reference/string/string/replace/

Надеюсь, что это поможет.

Ответ 4

Для достижения этой цели вы можете использовать подстроку

  string s = "abc";
  string new_s = s.substr(0,1) + "a" + s.substr(2);
  cout << new_s;
  //you can now use new_s as the variable to use with "aac"