看一个题目: 编写一个程序,判断一个字符串是否为“回文”(顺读和倒读都一样的字符串称为“回文”)。
#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;}新闻热点
疑难解答
图片精选