繁体   English   中英

C++“相同字母”代码无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM