Определить, какой из знаков препинания встречается чаще всего и реже всего - C (СИ)

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

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

ребят,помогите исправить ошибки.Есть код.Нужно найти какой из знаков препинания встречается мах и мин кол-во раз.
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
#include "locale.h"
#include "string.h"
#include "windows.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
 
setlocale( LC_ALL,"Russian" );
FILE *f;
int x[6]={0};
int i,j,n,jmax,jmin;
char q[150];
char **s;
char *v="1 laba prog.txt";
char b[7]={".,;:!?"};
f=fopen(v,"r+");
if(!f){printf("error"); getch(); exit(0);}
int index=0,chet=0;
n=0;
 
while(!feof(f)){
     fgets(q,150,f);
     chet++;
}
 
s =(char**)calloc(chet,sizeof(char*));
 
rewind(f);  
 
while(!feof(f)){
fgets(q,99,f);
    for(int i=0;i<(chet);i++)s[i]=(char*)calloc(strlen(q)+1,sizeof(char));
strcpy(s[index],q);
puts(s[index]);
index++;
}

for(int m=0;m<index;m++){
 
int len=strlen(s[m]);
 
for(i=0;i<len;i++)
{
    for(j=0;j<6;j++)
      if(s[m][i]==b[j]) x[j]++;
}

int min=x[0], max=x[0];
for(j=0;j<6;j++)
    {
    if((x[j]<min) && (x[j]!=0)) 
    {min=x[j];
    jmin=j;}
    if(x[j]>max) 
    {max=x[j];
    jmax=j;} 
}
fprintf(f,"\nМинимальное кол-во знаков препинания в строке:%d\n",min)   ;
fprintf(f,"Мaксимальное кол-во знаков прпинания в строке:%d\n",max) ;

fprintf(f,"max %s",b[jmax]);
fprintf(f,"min %s",b[jmin]);
}
fclose(f);

for(int i=0;i<chet;i++)free(s[i]);
    free(s);
getch();
return 0;
}

Решение задачи: «Определить, какой из знаков препинания встречается чаще всего и реже всего»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main() {
    const char CFileName[] = "file.txt";
    const char CPunct[] = ".,;:!?";
    const char* p;
    int cnt[6] = { 0 }, i, ch, min, max;
    FILE* f;
 
    if ((f = fopen(CFileName, "r")) == NULL) {
        perror(CFileName);
        return 1;
    }
 
    while ((ch = fgetc(f)) != EOF) {
        if ((p = strchr(CPunct, ch)) != NULL) {
            cnt[p - CPunct]++;
        }
    }
 
    fclose(f);
 
    min = max = 0;
    for (i = 1; i < 6; ++i) {
        if (cnt[i] < cnt[min]) {
            min = i;
        }
        else if (cnt[i] > cnt[max]) {
            max = i;
        }
    }
 
    printf("min '%c' = %d\n"
           "max '%c' = %d\n",
           CPunct[min], cnt[min],
           CPunct[max], cnt[max]);
 
    system("pause");
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные:
    • const char CFileName[] = file.txt; - имя файла
    • const char CPunct[] = .,;:!?; - символы пунктуации
    • const char* p; - указатель на символ пунктуации
    • int cnt[6] = { 0 }, i, ch, min, max; - счетчик встречаемости символов, индекс, текущий символ, минимальное и максимальное значение
    • FILE* f; - указатель на файл
    • fclose(f); - закрытие файла
    • min = max = 0; - инициализация минимального и максимального значения
    • for (i = 1; i < 6; ++i) { - цикл по символам пунктуации
    • if (cnt[i] < cnt[min]) { - если текущее значение счетчика меньше минимального
    • min = i; - обновляем минимальное значение
    • }
    • else if (cnt[i] > cnt[max]) { - иначе если текущее значение счетчика больше максимального
    • max = i; - обновляем максимальное значение
    • }
    • }
    • printf(min '%c' = %d\n
    • max '%c' = %d\n,
    • CPunct[min], cnt[min],
    • CPunct[max], cnt[max]); - выводим результаты на экран
    • system(pause); - ждем нажатия клавиши
    • return 0; - завершаем программу

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


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

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

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