C语言编程实现任务描述 本关任务: 输入一个字符串,不超过100个字符,编写程序,统计其中各个字符出现的频度。 使用gets读入一行字符串 输出格式按照测试例的样式来写,字符和频次各占一行。 输出字符的格式为"%3c",输出频次的格式为"%3d" 注意:字符的顺序按照在字符串中首次出现的顺序来写,频次的顺序与字符的顺序一致。 测试说明 平台会对你编写的代码进行测试: 测试输入:Good morning; 预期输出: G o d m r n i g 1 3 1 1 1 1 2 1 1
时间: 2024-03-05 15:50:40 浏览: 54
以下是实现该功能的C语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
int main() {
char str[MAX_LENGTH + 1];
int freq[MAX_LENGTH], len, i, j, count;
memset(freq, 0, sizeof(freq));
printf("请输入一个不超过100个字符的字符串:\n");
gets(str);
len = strlen(str);
for (i = 0; i < len; i++) {
count = 1;
for (j = i + 1; j < len; j++) {
if (str[i] == str[j]) {
count++;
freq[j] = -1; // 标记已统计过的字符
}
}
if (freq[i] != -1) {
freq[i] = count;
}
}
printf("字符 频次\n");
for (i = 0; i < len; i++) {
if (freq[i] != -1) {
printf("%3c %3d\n", str[i], freq[i]);
}
}
return 0;
}
```
与前一个问题类似,不同之处在于需要按照字符在字符串中首次出现的顺序来输出结果。为了实现该功能,可以在遍历字符串时,用一个标记数组来记录每个字符是否已经统计过。具体来说,当统计第i个字符的频率时,可以将其后面与其相等的字符的频率都标记为-1,表示已经统计过。这样,在输出结果时,只需要输出频率数组中不为-1的元素即可。
注意:在使用gets()函数读入字符串时,如果输入的字符串长度超过100个字符,则会导致缓冲区溢出,可能会导致程序崩溃。为了避免这种情况发生,可以使用fgets()函数或者限制用户输入的字符串长度。