我正在尝试使用c ++访问向量,但它会将下标超出范围
string s = "itwqbtcdprfsuprkrjkausiterybzncbmdvkgljxuekizvaivszowqtmrttiihervpncztuoljftlxybpgwnjb";
vector<int> result(s.size());
result.resize(s.size());
for (int i = 0; i < s.size(); i++)
{
int d = s[i];
result[d]++;
}
答案 0 :(得分:2)
int d = s[i];
不确定您想要什么,但d
与'i'
无关,与result.size()
无关。
'i'
在ASCII中基本上是105
。
您可能需要map
const std::string s =
"itwqbtcdprfsuprkrjkausiterybzncbmdvkgljxuekizvaivszowqtmrttiihervpncztuoljftlxybpgwnjb";
std::map<char, std::size_t> result;
for (char c : s)
{
result[c]++;
}
for (const auto& p : result) {
std::cout << "letter " << p.first << " appears " << p.second << "times\n";
}
如果你想保留你的矢量,你可以这样做:
const std::string s =
"itwqbtcdprfsuprkrjkausiterybzncbmdvkgljxuekizvaivszowqtmrttiihervpncztuoljftlxybpgwnjb";
std::vector<std::size_t> result(26);
for (char c : s) {
if ('a' <= c && c <= 'z') {
result[c - 'a']++;
}
}
for (std::size_t i = 0; i != result.size(); ++i) {
std::cout << "letter " << char('a' + ) << " appears " << result[i] << "times\n";
}
答案 1 :(得分:-1)
简单地说,s.size ()
是错误的值result
。我会尝试像
vector<int> result(CHAR_MAX, 0);
并删除对resize
的调用,这不是多余的,因为它实际上是有害的。