如何计算单个字母的出现次数

Posted

技术标签:

【中文标题】如何计算单个字母的出现次数【英文标题】:How to count occurrences of individual letters 【发布时间】:2015-12-16 01:32:10 【问题描述】:

任务:编写一个程序,读取一行文本并输出每个字母出现的次数。

#include <iostream>
#include <string>
#include <cstring>
#define N 100
using namespace std;
int main()

    char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";
    int alphacount[26];
    char lot[N], *p1;
    int txtlen, *p2;

    cout << " Enter a line of text: " << endl;
    cin.getline(lot, 99);

    txtlen = strlen(lot);

    p1 = lot;
    p2 = &txtlen;

    for (int x = 0; x < *p2; x++)
    
        for (int y = 0; y < 26; y++)
        
            if (*p1 == alphabet[y])
            
                alphacount[y]++;
                p1++;
            
        
    
    cout <<;

需要什么条件,用什么变量来输出出现的字母?例如:

> enter a line of text : mervlala

输出:

a - 2,
e - 1,
l - 2,
m - 1,
r - 1,
v - 1

【问题讨论】:

你需要遍历alphacount并打印非空值。 离题:很多更简单的方法来做到这一点。 isalpha 消除了对 for (int y= 0; y&lt;26 ; y++) 循环的需要。 tolower 将允许您同时捕获大小写字母。 离题:p2 是不必要的。切勿在不必要的地方使用指针。 您的计算循环不正确(尽管一旦您的输出正常工作,调试起来会更容易) 【参考方案1】:

你是c++编程,你应该使用c++的方式。

#include <algorithm>

int main ()

    std::string textline;
    std::getline (std::cin,textline);

    for(char ch = 'a'; ch <= 'z'; ch++)
    
        std::size_t n = std::count(textline.begin(), textline.end(), ch);
        if(n > 0)
            std::cout << " - " << n << "," << std::endl;
    

【讨论】:

好答案。正确的方法,但几乎可以肯定对 OP 无用。 我不明白,为什么没用? 乍一看,只想把循环运行到26。不需要计算NULL。 对于这样的编程问题介绍,您通常不希望使用strings 和algorithm 让助教感到自卑 我不计算 NULL,我不明白你在说什么,当你说不需要计算 NULL,你不喜欢我的回答,再给一个,我试着帮助。有时我认为使用字符串比使用字符表更容易。有时使用 C++ 比使用 C 更容易。 OP没有具体说明他想要什么样的答案,他想要帮助,我给了他我的帮助。很抱歉,如果您不喜欢这个答案。

以上是关于如何计算单个字母的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算特定字母在字符串中出现的次数? (C++)

如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?

计算文件中每个字母的出现次数?

excel如何计算一行excel单元格中相同字符字母出现次数

EXCEL同一单元格内出现相同字母的次数

python计算字母出现次数