C++中的可变长数组string

来源:互联网 发布:apache base64 encode 编辑:程序博客网 时间:2024/06/14 09:40

看一个题目:
编写一个程序,判断一个字符串是否为“回文”(顺读和倒读都一样的字符串称为“回文”)。

#include<iostream>#include<string>using namespace std;int main(){  string s,g;  cin <<s;  for( int i=0;i<s.size();i++ )  {    g[s.size()-i-1]=s[i];  }  if( s == g )  {    printf("回文");  }  else  {    printf("非回文");  }  return 0;}

然而这个代码并不能满足要求,我们看到第10行的代码,这行代码想按位倒序把字符串s复制给字符串g,然而这个代码并不能正常执行。有人可能会奇怪:C++中的string类定义的不是可变长字符串吗?

C++中使用string定义的字符串虽然是可变长字符串,但是不能采用上边这种方式改变长度。上边代码中的字符串g没有初始化,g[0]、g[1]这些空间都还没有被声明定义出来,所以不能直接访问和使用。所以修改一下:在输入字符串s之后把s字符串直接复制给g,这样g的长度就被改变了,也就实现了可变长数组的功能。

修改后的代码如下:

#include<iostream>#include<string>using namespace std;int main(){  string s,g;  cin <<s;  g = s;  for( int i=0;i<s.size();i++ )  {    g[s.size()-i-1]=s[i];  }  if( s == g )  {    printf("回文");  }  else  {    printf("非回文");  }  return 0;}
0 0