Подсчитать количество знаков в строке. вывести их частоту - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание Будет задана строка ни чем не ограниченная. Ее нужно считать соблюдая правила безопасности (баффер оверфлоу) Подсчитать количество Элементов заданных в строке подсчитать все невыводимые знаки (будут учитываться только символы из ASC2 таблицы) а также все пробелы точки и запятые может быть задана строка как очень длинная (для теста соблюдения безопасности) так и без элементов (вывести сообщение) все элементы будут отсортированы по номеру символа (0=48 А=56 и тд) если перед задание строки будет введет параметр (1-256 по количеству символов в этой таблице) то сортировка будет от наичастей встречающегося символа до самого менее встречающегося причем выведена таблица с ограничением по рядам...те параметр был 7 только 7 самых популярных символов вид таблицы 48 "0" : 300 56 "А" : 123 ... Учитывая что это вторая моя программа по Си то после программы Привет мир... это довольно сложно для меня буду благодарен за любую подсказку сложнее всего мне пока понятно как реализовать подсчет символов в цикле что у меня пока получилось это вот...хотя конечно ересь ------- мне было бы очень важно в начале понять как прочитать безопасно строку с учитыванием буфера и как ее записать в массив(если я правильно понимаю) и как подсчитать знаки поступно их сравнивая между собой и записывая их частоту нельзя использовать перевод в чисельную составу с пом функции только getchar() gets нельзя тк небезопасна
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int N,m,f;
 
    char soka[N],znak;
    
    /* char *ustroka;
    
    printf("piste uz neco:\n");
    
    fgets(stroka, N, stdin); //nacteme radek  */
    
    /*gets(soka);*/

    m = getchar();
 
    for (int i=0;m != EOF && m !='\n';i++) {
        
        soka[i] = m;
        
        m = getchar();
        
        znak = soka[i];
        
        int j=0;

        for(j=j+1;j!='\n'; j++)
        { 
            if ('d' == soka[j])
               f++;
        }
        
        printf("%d :%d",soka[i],f);
        printf(" %c\n",soka[i]);
    }
 
    f=strlen(soka);
    printf("dlina %d\n",f);
    
    return 0;
}

Решение задачи: «Подсчитать количество знаков в строке. вывести их частоту»

textual
Листинг программы
#include <stdio.h>
 
#include <stdlib.h>
 
#define LINE 50
 
int main(){
    
int k=0; int n=0;int f,v;
    
    char retez[LINE]="";
    char znak;
    char dvas[LINE][LINE];
    int count, j;
 
    
    
while ((k=getchar()) != EOF){
        
        retez[n]=k;
        
        
        znak = retez[n];
 
        int siz=sizeof(retez);
        
        count=0;
        
        for (j=0;j < siz;j++){          
            
            if(znak == retez[j]){
            count++;}                    
 
            
        }
        
        /*kolik[n]=count;*/
 
        
        
        /*printf ("simbol %d '%c' cetnost %d\n"
                        ,retez[n],znak,count);*/ 
 
    n++;                               
        
    }  
                              
int siz=sizeof(retez);
    
// zdes vse vyvodit supet poprobuju zapisat vse do 2mernogo massiva chtoby potom otsortirovat
            
    
for(j=32;j<127;j++){                 
                                         
        k=0;
        
        for (n=0;n < siz;n++) {  
    
        if(retez[n]==j){k++;}
        }
 
        if(k!=0){
 
        printf ("'%c': %d\n\n",j,k);}
        
    }                                      
 
 
//vse poka chto toze rabotaet povtorajet predyduschii vyvod
 
 
int c=(dvas[0][0]='s');
printf ("%c\n\n",c);
 
    
for(j=32;j<127;j++){                  
                                          
    k=0;
    n=0;
    int f;
        
        for (f=0;f < siz;f++) {  
    
        if(retez[f]==j){k++;}
        }
              
 
        if(k!=0){
        
            
        dvas[f][0]=j;                        //nacalo jako n=0 k=0
                                                  // n=0 k=1
        printf ("'%c': ",dvas[f][0]);
            
        dvas[f][1]=k;
            
        printf ("%d\n",dvas[f][1]);}
 
            
        
}                                    ///potom ja hotel pomeniat srtoki v massive no uze  eto ne poluchilos(((
    
        
    
    /*for (n=0; n < siz; n++) {
        
        if(dvas[n][1] < dvas[n][1]){
            
        int tmp = dvas[n][0];
        int tmr = dvas[n][1];
                
        dvas[n][0] = dvas[n+1][0];
        dvas[n][1] = dvas[n+1][1];
 
        dvas[n+1][0]=tmp;
            dvas[n+1][1]=tmr;
 
    }
    
        
    }*/
    
 
    
    puts(retez);
    
    
    
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы