Учитывая строку, состоящую из алфавитов и цифр, найдите частоту каждой цифры в данной строке - PullRequest
0 голосов
/ 22 июня 2019

Пожалуйста, скажите мне, что не так в коде, вывод: 00000000.
Я знаю, что есть какая-то ошибка, но не могу ее найти.

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

int main()
{
     int c=0;
     char s[100];
     fgets(s, 100, stdin);
     printf("%s", s);
     for(int i=0;i<=9;i++)
     {
         for(int j=0;j<strlen(s);j++)
         {
             if(s[j]==i){
                 c++;
            }           
         }
         printf("%d", c);
     }

    return 0;
}

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Во-первых, вы сравниваете персонажа с int. Посмотрите на Преобразование Char в int в C для решения.

Тогда я бы помнил, что "0" - это индекс 48 в таблице ASCII, а не 0: http://www.asciitable.com/

0 голосов
/ 22 июня 2019

Ключевая проблема - s[j]==i. Это сравнивает char строки со значениями от 0 до 9, а не с char '0' до '9'.

Другим является то, что c не сбрасывается в ноль каждый цикл.


Вместо 10-кратного цикла проверьте, является ли char цифрой.

Вместо повторного вызова j<strlen(s), просто проверьте, если s[j] == 0

 size_t digit_frequency[10] = {0};

 for (size_t i=0; s[i]; i++) {
   if (isdigit((unsigned char) s[i])) {
   // or  if (s[i] >= '0' && s[i] <= '9') {
     digit_frequency[s[i] - '0']++;
   }
 }

 for (size_t i=0; i<10; i++) {
   pritnf("%zu\n", s[i]);
 }

Код использует size_t вместо int в качестве строки. Длина ограничена size_t - которая может превышать int в крайних случаях. Либо работай ОК работай размером 100

isdigit() заявлено в <ctype.h>

(unsigned char) используется как isdigit() ожидаемое значение в (unsigned char) и EOF, а char может быть отрицательным.

Различные варианты стиля - все функционируют одинаково.

for (size_t i=0; s[i]; i++) {
for (size_t i=0; s[i] != '\0'; i++) {
for (size_t i=0; s[i] != 0; i++) {

«Заданная строка, состоящая из алфавитов и цифр» является незначительным сокращением. В C строка включает в себя конечный нулевой символ : «A строка представляет собой непрерывную последовательность символов, оканчивающихся и включающих первый нулевой символ» C11 §7.1 .1 1. Тем не менее, люди часто говорят в разговорной речи, так как нулевой символ не был частью строки.

...