Определить, какой из знаков препинания встречается чаще всего и реже всего - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные:
- 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; - завершаем программу
- const char CFileName[] =
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д