string str;
vector<int> v(200,0);
getline(cin, str);
for (int i = 0 ; i < str.size(); i++) {
v[str[i]-97]++;
}
for (int i = 0; i < 26; i++) {
printf("%d ", v[i]);
}
v.clear();
cout << endl;
for (int i = 0; i < 26; i++) {
printf("%d ", v[i]);
}
我想知道每个字母的数量和清晰的矢量v。但它不起作用。是什么原因?
答案 0 :(得分:1)
调用v.clear()会将向量调整为零元素。如果要将元素设置为特定值(此处为0),保持原始大小,可以使用
v.assign(v.size(), 0);
答案 1 :(得分:0)
将最后一个for循环更改为:
for (int i = 0; i < v.size(); i++) {
printf("%d ", v[i]);
}
答案 2 :(得分:0)
你正在清除你的向量,移除所有元素,然后你似乎试图遍历它的前25个元素,即使它是空的。
你抛出std_out_of_range的原因是因为你试图访问它们不存在的元素。
如果您无法确保相关的矢量不会包含那么多元素,那么您几乎不应该通过已设定的次数循环访问某些内容。
如果你必须在你的向量中循环一定次数,至少要确保你的向量首先包含那么多元素。
if (v.size() >= 25)
{
for (int i = 0; i <= 25; i++)
{
printf("%d ", v[i]);
}
}
在这种情况下,你的向量绝对不会有25个元素,因为你在循环之前清除了向量,但它更安全。