再实现字符串的倒序输出时,发现了一个问题:
#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的长度也会增加。
网友评论