Посчитайте частоту цифр в строке - PullRequest
0 голосов
/ 01 декабря 2018

Мне нужно реализовать функцию, которая может считать количество цифр в строке.Так что для чисел, но и для чего-то вроде: aD23b.Если бы я мог заставить это работать ... это должно выглядеть такВход: 0912302Выход:0: 21: 12: 23: 14: 05: 06: 07: 08: 09: 1

На данный момент я не могу кодировать ничего, что работает, к сожалению ... Моя основная идея: использовать цикл для проверки каждого символа из ввода, если это цифра, сохранить его во втором массиве (скажем,частота).У меня проблемы с тем, что мне нужно каким-то образом преобразовать каждый символ в целое число или каким-то образом подсчитать, как часто появляются каждая цифра ... Я надеялся, что это может сработать, но это не так:

Я забыл упомянуть, что я новичок в программировании, поэтому я был бы очень признателен, если бы вы могли дать мне советы и объяснения.

void calc_occurrences(int s[], int occurrences[])
{
int i = 0;
    int j;
    int count = 0;
    while (s[i] != '\0') {
        if (isdigit(s[i])) {
            for (j = 0; occurrences[j] != '\0'; j++) {
                occurrences[j] = s[i];
            }
        }
        i++;
        for (j = i + 1; s[j] != '\0'; j++) {
            if (isdigit(s[i]) == isdigit(s[j])) {
                count++;
                occurrences[j] = 0;
            }
        }

        if(occurrences[i] != 0) {
            occurrences[i] = count;
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Создать массив для подсчета частоты каждого соответствующего символа.

Примерно так:

#include <stdio.h>

void count_freq(char* str, int freq[10])
{
    int i = 0;
    while(str[i])  // Loop to end of string
    {
        if (str[i] >= '0' && str[i] <= '9') // Check that the character is in range
        {
            ++freq[str[i]-'0'];  // notice the -'0' to get in range 0..9
        }
        ++i;
    }
}

int main(void) {
    int freq[10] = {0};             // Array to count occurence
    char str[] = "0034364hh324h34"; // Input string

    count_freq(str, freq);          // Calculate frequency

    for (int i=0; i < 10; ++i)      // Print result
    {
        printf("%d: %d\n", i, freq[i]);
    }
    return 0;
}

Вывод:

0: 2
1: 0
2: 1
3: 4
4: 4
5: 0
6: 1
7: 0
8: 0
9: 0
0 голосов
/ 20 августа 2019

PS: я знаю, я отвечаю на старый пост, но я пытался решить некоторые проблемы с HackerRank, и мне удалось решить эту почти точную проблему, на случай, если это кому-нибудь поможет, так как я использовал динамическое распределение на своемкод.

/* Problem: hackkerrank.com/challenges/frequency-of-digits-1/problem */

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
    char    *s;
    char    arr;
    int    i;

    i = 0;
    s = (char*)malloc(sizeof(char));
    scanf("%s", s);
    arr = (int*)malloc(10 * sizeof(int));
    while(i < 10)
    {
        *(arr + i) = 0;
        i++;
    }
    i = 0;
    while (i < strlen(s))
    {
        if (*(s + i) >= '0' && *(s + i) <= '9')
        {
            (*(arr + (*(s + i) - '0'))) += 1;

        }
        i++; 
    }
    i = 0;
    while (i < 10)
    {
        printf("%d ", *(arr + i)); // As HackerRank problem wanted the output format.
        // printf("%d: %d\n", i, *(arr + i));  As you wanted it
        i++;
    }
    return (0);
}
0 голосов
/ 01 декабря 2018

Вы можете иметь целочисленный массив размером 10 с 0, сохраненный во всех индексах.Затем, когда вы видите цифру, вы можете увеличивать число в соответствующем индексе.

Например, когда вы видите «0», вы можете сделать arr [0] ++;.

Кроме того, вы можете проверить, является ли символ цифрой, с помощью функции isdigit ().

...