美文网首页
字符串动态赋值

字符串动态赋值

作者: 与时间共舞 | 来源:发表于2020-04-30 18:07 被阅读0次

    再实现字符串的倒序输出时,发现了一个问题:

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        string str1,str2;
        cin>>str1;
        int len = str1.length();
        for(int i=0; i<len; i++){
            str2[i] = str1[len-i-1];
        }
        cout<<str2.length(); //值为零 
        cout<<str2;  //没有值 
    

    打印结果:


    01.png

    我们会发现,字符串str2的长度为零,直接打印str2没有值显示,这是因为字符串str2在定义的时候没有给它长度,所以这个字符串的长度默认为零,虽然字符串中的每个对应的下标位上有对应的字符,但是采用这种方式赋值没有改变字符串的长度,所以字符串的长度仍然为零,因此不能使用这种方式赋值。
    正确的赋值方式如下:

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main(){
        string str1,str2;
        cin>>str1;
        int len = str1.length();
        for(int i=0; i<len; i++){
    //      str2[i] = str1[len-i-1];
            str2 += str1[len-i-1];
        }
        cout<<str2.length()<<endl; //值为零 
        cout<<str2;  //正常输出 
    
        return 0;
    }
    

    所以字符串的正确动态赋值是采用的“加等于”的形式,首先str是个指针,当我们采用这种方式赋值的时候,每一次都会把指针指向内存中相邻的下一个地址位,这时候str的长度也会增加。

    相关文章

      网友评论

          本文标题:字符串动态赋值

          本文链接:https://www.haomeiwen.com/subject/evhzwhtx.html