用C语言实现,输入一个字符串并记录其中字母出现的次数,并且打印出各字符串对应的次数,注意,要求时间复杂度为O(n)。 举例如下 输入字符串:”Hello!” 输出打印如下 H1 e1 l2 o1 !1 请写程序
时间: 2024-02-26 11:58:24 浏览: 55
C语言实现输入一个字符串后打印出该字符串中字符的所有排列
下面是一个C语言的程序实现:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char s[1000];
int char_count[26] = {0}; // 用于记录每个字母出现的次数
// 输入字符串
printf("请输入一个字符串:");
fgets(s, 1000, stdin);
// 遍历字符串中的每个字符
for (int i = 0; i < strlen(s); i++) {
char c = s[i];
// 如果字符是字母,则记录它出现的次数
if (isalpha(c)) {
// 将字母转换成小写,以便使用它来索引字母出现次数数组
c = tolower(c);
// 如果字母还没有出现过,则将它加入字母出现次数数组,并设置出现次数为1
if (char_count[c - 'a'] == 0) {
char_count[c - 'a'] = 1;
}
// 如果字母已经出现过,则将它出现次数加1
else {
char_count[c - 'a']++;
}
}
}
// 打印出各个字母出现的次数
for (int i = 0; i < 26; i++) {
if (char_count[i] > 0) {
printf("%c%d ", 'a' + i, char_count[i]);
}
}
return 0;
}
```
这个程序的时间复杂度为O(n),其中n是字符串的长度。它使用一个大小为26的数组来记录每个字母出现的次数,遍历字符串中的每个字符,如果字符是字母,则将它加入字母出现次数数组中并设置出现次数为1,如果字母已经出现过,则将它出现次数加1。最后遍历字母出现次数数组,打印出各个字母出现的次数。
阅读全文