我需要按用户输入接收到的字符数组中的出现顺序返回一个ASCII字符计数
我当前的解决方案是按字符在ASCII表上的升序而不是用户输入的顺序返回字符
#include <stdio.h>
#include <string.h>
int main()
{
char string[16];
int c = 0, count[128] = {0}, x, counted = 0;
printf("Enter a word>\n");
scanf("%s", string);
while (string[c] != '\0') {
if(string[c] >= '!' && string[c] <= '~'){
x = string[c] - '!';
count[x]++;
}
c++;
}
for (c = 0; c < 128; c++){
if(count[c] > 1){
printf("Duplicate letter: %c, Occurrences: %d\n", c + '!', count[c]);
counted++;
}
}
if(counted < 1){
printf("No duplicates found\n");
}
return 0;
}
示例输入:
AAAAaaaaBBBbb99
所需的输出:
重复的字母:A,出现次数:4
重复的字母:a,出现次数:4
重复的字母:B,出现次数:3
重复的字母:b,出现的次数:2
重复的字母:9,出现次数:2
我当前的(错误的)输出:
重复字母:9,出现次数:2
重复的字母:A,出现次数:4
重复的字母:B,出现次数:3
重复的字母:a,出现次数:4
重复的字母:b,出现的次数:2
非常感谢这里的任何帮助
答案 0 :(得分:0)
这不是一个非常优雅的解决方案,但它可以工作:
#include <stdio.h>
#include <string.h>
int main() {
char string[1024];
int c = 0;
int count[128] = {0};
int x;
int counted = 0;
printf("Enter a word:\n");
scanf("%1023s", string);
while (string[c] != '\0') {
if(string[c] >= '!' && string[c] <= '~'){
x = string[c] - '!';
count[x]++;
}
c++;
}
int j = 0;
while (string[j] != '\0') {
int ch = string[j] - '!';
if(count[ch] > 1){
printf("Duplicate letter: %c, Occurrences: %d\n", ch + '!', count[ch]);
count[ch] = -1;
counted++;
}
j++;
}
if(counted < 1){
printf("No duplicates found.\n");
}
return 0;
}