Определить, какой из знаков препинания встречается чаще всего и реже всего - 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[] =