Другие языки программирования и технологии

помогите написать программу на си

Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза
// Программа будет работать с текстовым файлом, созданным в кодировке cp1251

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define N 256
void main() {
int buff[N] = {0};
int ch;
char space[] = "пробел";
FILE * stream;
setlocale(LC_CTYPE, "Russian_Russia.1251");
if ((stream = fopen("filename.txt", "r")) == NULL) printf("\a Невозможно открыть файл! \n");
else {
while(!feof(stream)) {
ch = fgetc(stream);
buff[ch]++;
}
for (ch = 16; ch < N; ch++)
if (buff[ch] && ch == 32) printf("%s -> %d\n", space, buff[ch]);
else if (buff[ch]) printf("l -> %d\n", (char)ch, buff[ch]);
}
if (fclose(stream) == EOF) printf("\a Невозможно закрыть файл! \n");
_getch();
}
Никита Михайлович
Никита Михайлович
96 368
Лучший ответ
в алфавите 33 символа (вроде).. . значит создаете массив от 0 до 32, где каждое значение соответствует номеру буквы в алфавите.. . затем просматриваете посимвольно весь текст и увеличиваете значение соответствующего элемента массива...
Влад Дмитренко
Влад Дмитренко
34 293
По-моему все проще: Не надо делать алфавит.
Создается 1 цикл
создается массив (где каждому эелементу присваивается один символ) и далее он сравнивается со всеми другими символами - если еще такой есть - добавляет кол-во +1. чтобы выводилось один раз можно еще например один массив сделать, где будет значение 1 или 0 для каждого символа - выводилось на экран или нет
Nur Mr.
Nur Mr.
28 336
int symb[256];
FILE* f;
int c;

f = fopen("file_name","r");
while(!feof(f))
{
c = fgetc(f);
symb[c]++;
}
fclose(f);

Посчитает любые символы. Без гемора.
Ответ товарищу вверху.
есть кодовая таблица символов ASCII у каждого символа есть свой код.
как для строчных так и для прописных.
так что создавать отдельно для алфавита массив, и еще вручную туда символы вбивать, это гемор тот еще. красота кода теряется.

суть программы такова.
цикл в цикле.
цикл 1 - алфавит. то есть от первой буквы алфавита, до последней, ну и спец символы по желанию )
второй цикл в первом цикле - посимвольное сравнение.
и вывод результата о конкретном символе.
закрывается второй цикл.
закрывается 1й цикл.
можно еще вывести общую информацию, типа количество строк, количество символов.. .
Jasper
Jasper
3 309
выслал на мыло ответ.

по-делу: создание алфавита всех символов кодовой таблицы - плохое решение, препод отправит с таким думать дальше. да и алгоритмически это шлак для данной задачи.
#include
#include

void main() {

char String[] ="Lorem Dolor sit ammet";

int length = strlen(String);
char SaveLeter[length];
int i,j,l,count=0;
int expr = 1;

for(i = 0; i < length; i++){
for(l = 0; l < length;l++){
if(SaveLeter[l] == String[i])
expr = 0;
}
if(expr != 0){
for(j = 0;j< length; j++){
if(String[i] == String[j]){
count++;
SaveLeter[i] = String[i];
}
}
printf("\n [%c] Count = %d",String[i],count);
count =0;
}
expr = 1;
}
}