[英]C++ “Same Letter” code doesn't work properly
#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”这样的其他字母可以完美地工作,所以这只是第一个字母的问题:/有人可以帮我吗?
谢谢 !
这一行:
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
arrays。 它会让你的生活更轻松。 例如,您的循环可以用算法替换:
int meter = std::count_if(sentence.begin(), sentence.end(),
[=] (unsigned char c) {
return std::tolower(c) == std::tolower(letter);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.