问题描述
vector<string> commonChars(vector<string>& words) {
int count[words.size()][26] = {};
//getting error?
//error: variable-sized object may not be initialized
string ele;
vector<string> result;
for(int s1=0; s1<words.size(); s1++){
for(int s2=0; s2<words[s1].size(); s2++){
count[s1][words[s1][s2]-97]++;
}
}
for(int s=0; s<26; s++){
int small = count[0][s];
for(int i=1; i<words.size(); i++){
small = min(small,count[i][s]);
}
while(small-- > 0){
ele = (char)(s+97);
result.push_back(ele);
}
}
return result;
}
在线int count[words.size()][26] = {};
错误:可能无法初始化可变大小的对象
谁能帮帮我?这是什么错误?
解决方法
本声明
int count[words.size()][26] = {};
声明可变长度数组,因为表达式 words.size()
的值不是编译时常量。
变长数组不是标准的 C++ 特性。似乎使用的编译器有自己的语言扩展,允许使用 VLA。
尽管如此,您不能在声明中初始化这样的数组。
所以你需要写
int count[words.size()][26];
然后您可以使用例如 C 函数 memset
或标准算法(如 std::fill
或 std::generate
)来初始化数组。
实际上不需要在你的函数中声明一个二维变长数组。至少你可以使用像
这样的一维数组int count[26] = {};
并使用它来处理向量中的每个字符串。
但是使用标准容器 std::map<char,size_t>
而不是数组会更好。