将char转换为int

时间:2016-08-21 17:57:03

标签: c++

我正在尝试使用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]++;
    }

2 个答案:

答案 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的调用,这不是多余的,因为它实际上是有害的。