如何计算单个字母的出现次数
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<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。 对于这样的编程问题介绍,您通常不希望使用string
s 和algorithm
让助教感到自卑
我不计算 NULL,我不明白你在说什么,当你说不需要计算 NULL,你不喜欢我的回答,再给一个,我试着帮助。有时我认为使用字符串比使用字符表更容易。有时使用 C++ 比使用 C 更容易。 OP没有具体说明他想要什么样的答案,他想要帮助,我给了他我的帮助。很抱歉,如果您不喜欢这个答案。以上是关于如何计算单个字母的出现次数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?