从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。如果没有字母,请输出字符串中无字母。
时间: 2023-05-31 22:19:20 浏览: 264
### 回答1:
好的,以下是回复:
首先,我们需要从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。可以使用scanf函数来实现:
int n; // 行数
scanf("%d", &n);
char str[100]; // 字符数组
for(int i=; i<n; i++){
scanf("%s", str);
// 统计字母出现次数
}
然后,我们需要统计所输入的字符串中26个字母(不区分大小写)出现的次数。可以使用一个长度为26的数组来存储每个字母出现的次数,然后遍历字符串,将每个字母出现的次数加1。需要注意的是,由于不区分大小写,所以需要将所有字母转换为小写字母再进行统计。
int count[26] = {}; // 存储每个字母出现的次数
for(int i=; i<strlen(str); i++){
if(str[i]>='a' && str[i]<='z'){ // 如果是小写字母
count[str[i]-'a']++; // 将出现次数加1
}
else if(str[i]>='A' && str[i]<='Z'){ // 如果是大写字母
count[str[i]-'A']++; // 将出现次数加1
}
}
最后,我们需要将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。可以遍历数组,将出现次数非零的字母输出到屏幕上。
int flag = ; // 标记是否有字母出现
for(int i=; i<26; i++){
if(count[i]>){
printf("%c:%d\n", i+'a', count[i]); // 输出字母和出现次数
flag = 1; // 标记有字母出现
}
}
if(flag==){ // 如果没有字母出现
printf("字符串中无字母\n");
}
完整代码如下:
#include <stdio.h>
#include <string.h>
int main(){
int n; // 行数
scanf("%d", &n);
char str[100]; // 字符数组
for(int i=; i<n; i++){
scanf("%s", str);
int count[26] = {}; // 存储每个字母出现的次数
for(int j=; j<strlen(str); j++){
if(str[j]>='a' && str[j]<='z'){ // 如果是小写字母
count[str[j]-'a']++; // 将出现次数加1
}
else if(str[j]>='A' && str[j]<='Z'){ // 如果是大写字母
count[str[j]-'A']++; // 将出现次数加1
}
}
int flag = ; // 标记是否有字母出现
for(int j=; j<26; j++){
if(count[j]>){
printf("%c:%d\n", j+'a', count[j]); // 输出字母和出现次数
flag = 1; // 标记有字母出现
}
}
if(flag==){ // 如果没有字母出现
printf("字符串中无字母\n");
}
}
return ;
}
### 回答2:
本题需要用到字符数组、循环、if语句等基础知识。
首先,我们需要从键盘输入字符串的行数,然后再根据行数分别输入每一行的字符串,用字符数组存储。
接下来,我们需要用一个长度为26的数组来统计每一个字母出现的次数。可以先将所有元素初始化为0。
然后,在遍历字符串的过程中,我们对于每一个字符,先将其转换为小写字母(因为题目要求不区分大小写),然后判断它是否是字母。如果是,就在对应的计数器上加1。
最后,我们输出结果。如果结果中没有字母出现,就输出“字符串中无字母”。否则,我们就按照样例的格式将每一个有字母出现的计数器输出到屏幕上。
以下是示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n;
cout << "请输入字符串的行数:";
cin >> n;
getchar(); //吸收换行符
char str[100][100]; //二维数组,存储多行字符串
for (int i = 1; i <= n; i++) {
cout << "请输入第" << i << "行字符串:";
cin.getline(str[i], 100);
}
int cnt[26] = {0}; //计数器初始化为0
for (int i = 1; i <= n; i++) {
for (int j = 0; j < strlen(str[i]); j++) {
char c = tolower(str[i][j]); //转换为小写字母
if (c >= 'a' && c <= 'z') { //判断是否为字母
cnt[c - 'a']++; //对应计数器加1
}
}
}
bool flag = false; //标记是否有字母出现
for (int i = 0; i < 26; i++) {
if (cnt[i] > 0) { //该字母有出现
flag = true;
cout << (char)('a' + i) << ':' << cnt[i] << endl; //输出结果
}
}
if (!flag) cout << "字符串中无字母" << endl;
return 0;
}
```
### 回答3:
题意分析
本题要求统计输入的字符串中每个字母(不区分大小写)出现的次数,并输出出现次数非零的字母的统计结果。输入时要求先输入行数,再输入每行字符串,每行字符串用字符数组存储。
解题思路
输入行数,用循环控制输入每行字符串。输入字符串时,顺便统计每个字母的出现次数。为了统计方便,可以定义一个长度为26的数组(名字定义为letterCount),每个元素表示对应字母的出现次数。将输入的字母(小写)转换成ASCII码,再减去'a',就可以得到该字母对应letterCount数组的下标。将该下标对应元素加1即可完成计数。完成计数之后,再用循环输出统计结果。
具体实现
为了方便起见,可以先定义一个函数将小写字母转换成大写字母。具体实现如下:
char toUpper(char lower)
{
if (lower >= 'a' && lower <= 'z')
return lower - 'a' + 'A';
else
return lower;
}
另外,为了方便输出统计结果,可以将统计结果存在一个结构体中,结构体定义为:
typedef struct
{
int count;
char letter;
}LetterCount;
最后,完整代码如下:
阅读全文