С++, лучший способ изменить строку с определенным индексом
Я хочу изменить строку С++ на определенный индекс следующим образом:
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"