Определить все символы строки и их количество - C (СИ)
Формулировка задачи:
В общем, в одной из частей программы нужно считать строку из файла, и определить все символы, входящие туда и их количество. Пример: в файле написано АНТОН, значит результатом работы программы должно стать А -1, Н - 2, Т - 1, О-1, записано в столбик. Я знаю, что надо записывать в два массива: в один символы, в другой количество. Не понимаю, как пропускать символ, если повторяется, и вообще не совсем понял. Можно написать функцию, отображающую этот процесс? Заранее спасибо.
Решение задачи: «Определить все символы строки и их количество»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define k 30
#define a 1000
void Fnc1();
int main()
{
Fnc1();
return 0;
}
void Fnc1()
{
int i,j,n,m;
char max;
FILE *file;
char arr[a],str[k];
int number[k];
file = fopen("out.txt", "r"); // открываем файл для чтения
j = 0;
fgets(arr,sizeof(arr),file); //заносим все из файла в массив
max = arr[0];
for( i = 0; i < strlen(arr); i++)
{
if (arr[i] > max)
max = arr[i];
}
max++; //находим максимальный еллемент в массиве и добавляем к нему единицу. Тоесть получаем символ,которого нет в файле.
m = i = 0;
while (arr[i] != '\0')
{
if (arr[i] != max)
{
n = 0;
str[m] = arr[i];
for(j=0;j<strlen(arr);j++)
{
if (arr[j] == str[m])
{
arr[j] = max; //если букву проверили то заменим ее на символ который мы себе сделали
n++;
}
}
number[m] = n;
m++;
}
i++;
}
str[m] = '\0';
for(m = 0; m < strlen(str); m++)
printf("%c: %d\n",str[m],number[m]);
fclose(file);
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с файлами и строками
- Объявляем функцию
Fnc1, которая будет выполнять все необходимые операции - В функции
mainвызываемFnc1 - Открываем файл
out.txtдля чтения с помощьюfopenи сохраняем указатель на файл в переменнуюfile - Считываем все содержимое файла в массив
arrс помощьюfgets - Находим максимальный символ в массиве
arr - Создаем новый символ, который больше максимального на единицу и не встречается в файле
- Проходим по массиву
arrи заменяем все вхождения символаmaxна новый символ - Считаем количество вхождений каждого символа в массиве
arrи сохраняем результаты в массивnumber - Закрываем файл с помощью
fclose - Выводим количество вхождений каждого символа в массиве
strс помощьюprintf