#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; class f { private: string m; public: f (string m=0):m(m){} string getM() {return m;} int ifornot () { string n=m; reverse(m.begin(),m.end()); if(m==n) return 1; else return 0; } }; int main() { int i,x; vector<f>m; f p; string n; vector<string>b; while(cin>>n) { p=f(n); m.push_back(p); } x=m.size(); for(i=0;i<x;i++) { if(m[i].ifornot()==1) b.push_back(m[i].getM()); } sort(b.begin(),b.end()); x=b.size(); for(i=0;i<x;i++) cout<<b[i]; return 0; } 为什么运行出错
时间: 2024-01-18 11:04:57 浏览: 83
代码中存在一些语法错误和逻辑问题,导致程序无法正确运行。以下是可能的问题:
1. 缺少头文件:需要添加头文件 <string> 和 <algorithm> 才能使用 string 类型和翻转函数 reverse。
2. 类定义问题:在类定义中,构造函数的默认参数应该是空字符串,而不是数字0,需要将 f (string m=0) 修改为 f (string m="")。
3. vector 容器使用问题:在 vector<f> m 中,f 是一个类类型,需要在前面加上 typename,即 vector<typename f> m。
4. 逻辑问题:在 ifornot 函数中,将字符串反转后,应该保存到变量 n 中,而不是 m。因此需要将 string n=m; 修改为 string n=m;。
5. 输出问题:在输出回文字符串时,应该加上分隔符,例如空格或换行符。因此需要将 cout<<b[i]; 修改为 cout<<b[i]<<" ";。
修改后的代码如下所示:
```
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class f {
private:
string m;
public:
f (string m=""):m(m) {}
string getM() {return m;}
int ifornot () {
string n=m;
reverse(n.begin(),n.end());
if(m==n) return 1;
else return 0;
}
};
int main() {
int i,x;
vector<typename f> m;
f p;
string n;
vector<string> b;
while(cin>>n) {
p=f(n);
m.push_back(p);
}
x=m.size();
for(i=0;i<x;i++) {
if(m[i].ifornot()==1) b.push_back(m[i].getM());
}
sort(b.begin(),b.end());
x=b.size();
for(i=0;i<x;i++) cout<<b[i]<<" ";
return 0;
}
```
阅读全文