编译错误:您提交的代码无法完成编译第22行:12: error: variable length array of non-POD element type 'string' (aka 'basic_string')string a[n];^第87行:19: warning: comparison of integers of different signs: 'long' and 'size_type' (aka 'unsigned long') [-Wsign-compare]for (long i = 0;i<vec1.size();i++){ ~^~~~~~~~~~~~第98行:19: warning: comparison of integers of different signs: 'long' and 'size_type' (aka 'unsigned long') [-Wsign-compare]for (long i = 2;i<a.length();i++){ ~^~~~~~~~~~~2 warnings and 1 error generated.#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool find(vector<string > vec1,string temp,long&index);
string yhq(string a);
int main(){
long index = 0;
long n;
long sum = 0;
long wenhao;
long i;
int flag = 0;
vector<string> vec1;
string temp;bool is;
while (cin>>n){
vec1.clear();
wenhao = 0;
string a[n];
for (i = 0;i<n;i++){
a[i] = "";
}
cin.ignore();
if (n== 0){
cout<<-1<<endl;
sum++;
continue;
}
for (i = 0;i<n;i++){
getline(cin,a[i]);
}
for (i = 0;i<n;i++){
if(a[i][0] == 'I'){
temp = yhq(a[i]);
is = find(vec1,temp,index);
if (is == true){
if (wenhao>0){
wenhao--;
}else {
flag = 1;
break;
}
}else {
vec1.push_back(temp);
}
}else if (a[i][0] == 'O'){
temp = yhq(a[i]);
is = find(vec1,temp,index);
if (is == false){
if (wenhao>0){
wenhao--;
}else {
flag = 1;
break;
}
}else {
vec1.erase(vec1.begin()+index);
}
}else if (a[i][0] == '?'){
wenhao++;
}
}
if (flag == 0){
cout<<-1<<endl;
sum++;
}
else {
cout<<sum<<endl;
flag = 0;
sum = 0;
}
}
return 0;
}
bool find(vector<string> vec1,string temp,long&index){
for (long i = 0;i<vec1.size();i++){
if (vec1[i]==temp){
index = i;
return true;
}
}
return false;
}
string yhq(string a){
string temp = "";
for (long i = 2;i<a.length();i++){
temp.push_back(a[i]);
}
return temp;
}
1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
第 22 行处是错误,不过跟 string 没有关系。
string a[n] 这里你定义的 a 是数组,但是数组在定义时提供的数组大小必须是整型常量,不能用变量 n。
如果你想要一个元素是 string 、类似于数组的结构的话,就用 vector 好了: std::vector<std::string> a
第 87 和 98 行不是编译错误,只是警告。警告发生在 i<vec1.size() 这一句。
vector 的 size() 返回的是 size_type 类型(就是一个足够大的无符号整型类型),而你这里用 long 型的 i 去比较,long 是有符号整型,所以报了类型不匹配警告。
一般数值不大的话,这样的比较也不会出错,所以你可以忽略这个警告。 不过为了严谨,你应该将 i 声明为 vector<string>::size_type 类型 或者是 std::size_t 类型(这也是个常用的大整型)。
- 1 回答
- 0 关注
- 3800 浏览
添加回答
举报
0/150
提交
取消