C++, best way to change a string at a particular index

前端 未结 4 963
余生分开走
余生分开走 2020-12-24 13:02

I want to change a C++ string at a particular index like this:

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

Is the following code valid? Is this an a

相关标签:
4条回答
  • 2020-12-24 13:20

    Yes the code you have written is valid. You can also try:

    string num;
    cin>>num;
    num.at(1)='a';
    cout<<num;
    
    **Input**:asdf
    **Output**:aadf
    

    the std::replace can also be used to replace the charecter. Here is the reference link http://www.cplusplus.com/reference/string/string/replace/

    Hope this helps.

    0 讨论(0)
  • You could use substring to achieve this

      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"
    
    0 讨论(0)
  • 2020-12-24 13:37

    Assigning a character to an std::string at an index will produce the correct result, for example:

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

    which prints aac. The drawback is you risk accidentally writing to un-assigned memory if string s is blankstring or you write too far. C++ will gladly write off the end of the string, and that causes undefined behavior.

    A safer way to do this would be to use string::replace: http://cplusplus.com/reference/string/string/replace

    For example

    #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?
    }
    

    The replace function takes the string s, and at position 40, replaced one character, a questionmark, with the string s2. If the string is blank or you assign something out of bounds, then there's no undefined behavior.

    0 讨论(0)
  • 2020-12-24 13:41

    Yes. The website you link has a page about it. You can also use at function, which performs bounds checking.

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

    0 讨论(0)
提交回复
热议问题