C++ 查找字符串中最常见的字母

C++ 查找字符串中最常见的字母,c++,C++,我想在字符串中找到最常见的字母 这是我得到的提示,但我无法理解 将大小为26的整数数组初始化为全零(假设此数组为letterCount) 将输入字符串转换为所有小写(假设该字符串为encodedString) 使用for循环一步一个字符地遍历字符串。使用isalpha检查字符是否为字母字符。如果是,则按如下方式递增数组:letterCount[encodedstring[x]-97]+ 编辑:我的代码 int computeShift(std::string fileContent) {

我想在字符串中找到最常见的字母

这是我得到的提示,但我无法理解

  • 将大小为26的整数数组初始化为全零(假设此数组为letterCount)
  • 将输入字符串转换为所有小写(假设该字符串为encodedString)
  • 使用for循环一步一个字符地遍历字符串。使用isalpha检查字符是否为字母字符。如果是,则按如下方式递增数组:
    letterCount[encodedstring[x]-97]+
  • 编辑:我的代码

    int computeShift(std::string fileContent)
    {
        int letterCount[26] = { 0 };
        for (int i = 0; i < fileContent.length(); i++)
        {
            if (isalpha(fileContent[i]))
            {
                letterCount[fileContent[i]-97]++;
            }
        }
        return 3; //Temporary
    }
    
    int computeShift(std::string fileContent)
    {
    int-letterCount[26]={0};
    对于(int i=0;i
    您没有执行步骤2:

  • 将输入字符串转换为所有小写字母(假设该字符串为encodedString)
  • 这一点很重要,这样
    'a'
    'a'
    都可以映射到数组索引0,
    'b'
    'b'
    都可以映射到索引1,依此类推

    因此,您可以:

    • 在循环输入字符串之前,将其转换为所有小写:
    #包括
    std::string str_tolower(std::string s){
    std::transform(s.begin()、s.end()、s.begin(),
    [](无符号字符c){return std::tolower(c);}
    );
    返回s;
    }
    int computeShift(标准::字符串文件内容)
    {
    int-letterCount[26]={0};
    std::string fileContentLowerCase=str_tolower(fileContent);
    对于(int i=0;i
    • 将输入字符串保持原样,改用
      isupper()
      islower()
    #包括
    int computeShift(标准::字符串文件内容)
    {
    int-letterCount[26]={0};
    对于(int i=0;i
    到目前为止您尝试了什么?这不是暗示。这就是答案。我尝试过别人给我的东西,但一直都有收获Error@WesB您没有执行步骤#2-在迭代中的字符之前,将输入字符串转换为小写it@WesB这个提示意味着它并不总是小写的,这就是第二步存在的原因。所以除了代码看起来像是按照提示所说的那样。有什么不起作用?