字符串动态赋值

2020-04-30  本文已影响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的长度也会增加。

上一篇下一篇

猜你喜欢

热点阅读