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

编译错误:您提交的代码无法完成编译
第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;
}




菠萝1230
浏览 3809回答 1
1回答

onemoo

第 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 类型(这也是个常用的大整型)。
打开App,查看更多内容
随时随地看视频慕课网APP