编写一个程序,统计输入一行字符串中各个字母使用频率(大小写不区分),将次数不为零的字母及次数按照字母ascii码从小到大输出。
时间: 2023-05-31 07:21:03 浏览: 248
使用汇编语言,输入字符串,统计其总字符数、字母数、数字数、其他数并输出
### 回答1:
以下是一种 Python 实现方式:
```python
import collections
def count_letter_frequency(s: str):
# 将字符串全部转换为小写
s = s.lower()
# 统计字符串中各个字母出现次数
counter = collections.Counter(s)
# 将次数不为零的字母及次数按照字母 ascii 码从小到大排序
result = sorted(counter.items(), key=lambda x: ord(x[0]))
return result
s = input("请输入一行字符串:")
print(count_letter_frequency(s))
```
这段代码会输入一行字符串,统计输入的字符串中各个字母使用频率(大小写不区分),并将次数不为零的字母及次数按照字母 ascii 码从小到大输出。
### 回答2:
题目要求编写一个程序,统计输入一行字符串中各个字母使用频率。首先,我们需要明确输入的字符串是由键盘输入的,所以我们可以使用C++语言中的标准输入输出流iostream库的getline()函数来获取字符串。然后,我们需要遍历该字符串,将每个字符转化为小写字母,并使用一个数组来统计各个字母的出现次数。由于大小写字母的ascii码之间相差32,所以我们可以使用char类型强制转换的方式来实现大小写字母的统一。
程序的核心代码如下:
```cpp
#include <iostream>
using namespace std;
int main()
{
string input_str;
getline(cin, input_str); //获取输入字符串
int freq[26] = { 0 }; //存储各字母出现次数的数组,初始化为0
for (int i = 0; i < input_str.length(); i++)
{
char c = tolower(input_str[i]); //将字符转化为小写字母
if (c >= 'a' && c <= 'z')
{
freq[c - 'a']++; //统计该字母出现次数
}
}
//输出统计结果
for (int i = 0; i < 26; i++)
{
if (freq[i] != 0)
{
cout << char(i + 'a') << ": " << freq[i] << endl;
}
}
return 0;
}
```
该程序首先定义了一个字符串变量`input_str`来存储从键盘获取的输入字符串,然后定义了一个长度为26的数组`freq`来存储各字母出现次数,初始化为0,用来统计输入字符串中各个字母的使用频率。程序通过for循环遍历输入字符串,将每个字符转成小写字母,然后用if语句剔除掉非字母字符,并将字母出现的次数存储在`freq`数组中相应的位置。
最后,使用for循环遍历`freq`数组,将次数不为零的字母及次数按照字母ascii码从小到大输出。由于英文字母采用的是ASCII码,因此可以通过char(i+'a')的方式,可以把频率数组中的下标i转换成对应的字母输出到终端。
因此,该程序可成功地实现了统计输入一行字符串中各个字母使用频率,并将次数不为零的字母及次数按照字母ascii码从小到大输出。
### 回答3:
实现这个程序的关键在于如何统计每个字母的出现次数。一种简单的方法是使用一个长度为26的数组,分别记录a到z每个字母出现的次数。由于大小写不区分,因此可以先将输入的字符串全部转换为小写字母,再进行统计。
具体实现过程可以分为以下几步:
1. 定义一个长度为26的数组freq,用于记录每个字母出现的次数。初始化所有元素为0。
2. 读入一行字符串input。
3. 将字符串input中的所有大写字母转换为小写字母,可以使用tolower()函数实现。
4. 遍历字符串input的每个字符,如果该字符是字母(即ASCII码在65到90之间或97到122之间),则将对应的freq数组元素加1。
5. 遍历freq数组,输出出现次数不为零的字母及对应的次数。可以使用ASCII码的性质,直接按照数组下标从小到大输出。
下面是一个具体的实现示例:
```
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main() {
int freq[26] = {0};
string input;
getline(cin, input); // 读入一行字符串
for (int i = 0; i < input.length(); i++) {
if (isalpha(input[i])) { // 判断是否为字母
input[i] = tolower(input[i]); // 转换为小写字母
freq[input[i] - 'a']++; // 对应字母出现次数加1
}
}
for (int i = 0; i < 26; i++) {
if (freq[i] > 0) { // 只输出出现次数不为零的字母及次数
cout << char(i + 'a') << ": " << freq[i] << endl;
}
}
return 0;
}
```
该程序可以正确地统计输入一行字符串中各个字母使用频率,并将次数不为零的字母及次数按照字母ASCII码从小到大输出。例如,输入字符串"Hello, World!",则输出结果为:
```
d: 1
e: 1
h: 1
l: 3
o: 2
r: 1
w: 1
```
其中,字母按照ASCII码从小到大排列。
阅读全文