为了账号安全,请及时绑定邮箱和手机立即绑定

c++ 关于string和vector的两个错误

c++ 关于string和vector的两个错误

C C++
菠萝1230 2017-06-13 21:00:23
编译错误:您提交的代码无法完成编译第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 类型(这也是个常用的大整型)。

查看完整回答
反对 回复 2017-06-13
  • 1 回答
  • 0 关注
  • 3808 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信