首页 > 解决方案 > C ++“相同字母”代码无法正常工作

问题描述

#include <iostream>
#include <string>

using namespace std;

static char sentence[100];

void sameletter(char sentence[100])
{
    int meter=0;
    char letter;
    cout<<"Enter the letter you want to find in this sentence : ";
    cin>>letter;
    for(int i=0; sentence[i] != '\0'; i++)
    {
        if(sentence[i]==letter)
        {
            meter++;
        }
    }
    cout<<letter<<" letter used "<<meter<<" time(s)."<<endl;
}


int main()
{
cout<<"Enter Sentence : ";
cin>>sentence[100];
gets(sentence);
sameletter(sentence);
}

这是我写的代码。但由于某种原因,它从不包括最终结果的第一个字母。例如,假设我写“我们喜欢堆栈溢出”,我想这句话有多少次字母“w”,所以我点击 w,它只显示:“w 字母使用了 1 次。” 而不是2。像“o”这样的其他字母完美地工作,所以这只是第一个字母的问题:/有人可以帮我吗?

谢谢 !

标签: c++

解决方案


这一行:

cin >> sentence[100];

会将单个字符读入 的100第 th 索引sentence,这会调用欠精细行为。

此外,gets已从 中删除c++,您不应再使用它。

相反,您应该使用getline

int main()
{
  std::cout<<"Enter Sentence : ";
  std::getline(std::cin, sentence);
  sameletter(sentence);
}

另外,避免using namespace std;,这是不好的做法。

没有理由sentence成为static,或全球性的。

此外,您可以只使用std::string, 而不是char数组。它会让你的生活更轻松。例如,您的循环可以用算法替换:

int meter = std::count_if(sentence.begin(), sentence.end(), 
              [=] (unsigned char c) { 
                return std::tolower(c) == std::tolower(letter);
            });

推荐阅读