C++ "Same Letter"代码无法正常工作

C++ "Same Letter" code doesn't work properly

本文关键字:常工作 工作 Same Letter 代码 C++      更新时间:2023-10-16
#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] != ''; 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"工作得很好,所以这只是第一个字母的问题:/有人可以帮助我吗?

谢谢!

这一行:

cin >> sentence[100];

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

此外,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);
});