Другие языки программирования и технологии
помогите написать программу на си
Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза
// Программа будет работать с текстовым файлом, созданным в кодировке 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();
}
#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();
}
в алфавите 33 символа (вроде).. . значит создаете массив от 0 до 32, где каждое значение соответствует номеру буквы в алфавите.. . затем просматриваете посимвольно весь текст и увеличиваете значение соответствующего элемента массива...
По-моему все проще: Не надо делать алфавит.
Создается 1 цикл
создается массив (где каждому эелементу присваивается один символ) и далее он сравнивается со всеми другими символами - если еще такой есть - добавляет кол-во +1. чтобы выводилось один раз можно еще например один массив сделать, где будет значение 1 или 0 для каждого символа - выводилось на экран или нет
Создается 1 цикл
создается массив (где каждому эелементу присваивается один символ) и далее он сравнивается со всеми другими символами - если еще такой есть - добавляет кол-во +1. чтобы выводилось один раз можно еще например один массив сделать, где будет значение 1 или 0 для каждого символа - выводилось на экран или нет
int symb[256];
FILE* f;
int c;
f = fopen("file_name","r");
while(!feof(f))
{
c = fgetc(f);
symb[c]++;
}
fclose(f);
Посчитает любые символы. Без гемора.
FILE* f;
int c;
f = fopen("file_name","r");
while(!feof(f))
{
c = fgetc(f);
symb[c]++;
}
fclose(f);
Посчитает любые символы. Без гемора.
Ответ товарищу вверху.
есть кодовая таблица символов ASCII у каждого символа есть свой код.
как для строчных так и для прописных.
так что создавать отдельно для алфавита массив, и еще вручную туда символы вбивать, это гемор тот еще. красота кода теряется.
суть программы такова.
цикл в цикле.
цикл 1 - алфавит. то есть от первой буквы алфавита, до последней, ну и спец символы по желанию )
второй цикл в первом цикле - посимвольное сравнение.
и вывод результата о конкретном символе.
закрывается второй цикл.
закрывается 1й цикл.
можно еще вывести общую информацию, типа количество строк, количество символов.. .
есть кодовая таблица символов ASCII у каждого символа есть свой код.
как для строчных так и для прописных.
так что создавать отдельно для алфавита массив, и еще вручную туда символы вбивать, это гемор тот еще. красота кода теряется.
суть программы такова.
цикл в цикле.
цикл 1 - алфавит. то есть от первой буквы алфавита, до последней, ну и спец символы по желанию )
второй цикл в первом цикле - посимвольное сравнение.
и вывод результата о конкретном символе.
закрывается второй цикл.
закрывается 1й цикл.
можно еще вывести общую информацию, типа количество строк, количество символов.. .
выслал на мыло ответ.
по-делу: создание алфавита всех символов кодовой таблицы - плохое решение, препод отправит с таким думать дальше. да и алгоритмически это шлак для данной задачи.
по-делу: создание алфавита всех символов кодовой таблицы - плохое решение, препод отправит с таким думать дальше. да и алгоритмически это шлак для данной задачи.
#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;
}
}
#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;
}
}
Похожие вопросы
- Помогите написать программу на Си
- помогите написать программу на Си
- помогите написать программу на Си
- Помогите написать программу в СИ. буду очень благодарин
- помогите написать программу в Си
- Помогите написать программу на Си.
- Помогите написать программу на Си с помощью ФУНКЦИЙ.
- <<ПОМОГИТЕ! НАПИСАТЬ ПРОГРАММУ НА СИ ИЛИ ПАСКАЛЕ КОТОРАЯ ВЫВОДИТЬ СУММУ ЦИФР ЧИСЛА ОТ 1 ДО N
- Помогите написать программу на СИ++.Определить попадает ли точку в заштрихованную область
- Помогите написать программу со switch в СИ