C++中的可变长数组string

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ligaopeng001/article/details/56304420

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

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

猜你喜欢

转载自blog.csdn.net/ligaopeng001/article/details/56304420
今日推荐