c++ - 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”这样的其他字母完美地工作,所以这只是第一个字母的问题:/有人可以帮我吗?
谢谢 !
解决方案
这一行:
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);
});
推荐阅读
- r - 在 ubuntu 中更新 R 后遇到问题
- c# - 将应用程序发送到后台时,Xamarin.iOS 应用程序中的 HTTP 调用崩溃
- python - 子类化numpy:numpy方法返回ndarray而不是sublassed类型?
- php - PHP PDO Bind Param with having Clause,其中聚合函数与变量混合
- arrays - 如何通过两个键对多维数组进行排序
- java - IntelliJ 插件:以编程方式编辑运行配置设置和/或从上下文创建
- c - 如何在 Visual Studio 调试控制台中生成 BACKSPACE?
- javascript - Telegraf : 发送动画后发送消息
- android - 从从 Fragment 调用的自定义 AlertDialog 中获取选定的 RadioButton
- android - 运行方式包:不可调试