Возвращает количество символов ASCII в порядке ввода пользователем C - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно вернуть количество символов 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


Любая помощь здесь очень ценится

1 Ответ

0 голосов
/ 12 апреля 2019

Не очень элегантное решение, но оно работает:

#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;
}
...