Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 13:03   #1
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию Символьный файл на Си

Дано символьный файл. Подсчитать количество вхождений в файл каждой из букв а, b, c, d, e, f и вывести результат отдельными строками.
Заранее спасибо!!!!

Последний раз редактировалось Vasya94; 21.04.2013 в 13:07.
Vasya94 вне форума Ответить с цитированием
Старый 21.04.2013, 13:13   #2
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Что именно не понятно?
Работа с файлами :
Код:
    FILE *file;
    file=fopen("yourfilename","r");  //открытие yourfilename для чтения (r - read)
    .....
    fclose(file);
Чтение всех символов в файле
Код:
    while (!feof(file))                  // Пока не конец файла
    { 
        ch=getc(file);                      // Чтение символа ch из файла pf
        if (ch - 'a' <= 'f'-'a' ) //Принадлежит ли ch отрезку a-f
        {
            //Увеличиваем счетчик букв (например в массиве)
        }

    }
Hemul вне форума Ответить с цитированием
Старый 21.04.2013, 16:17   #3
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Вот написал код в котором выводит на екран буквы a,b,c,d,e,f. Но мне нужно Подсчитать количество вхождений в файл каждой из букв а, b, c, d, e, f и вывести результат отдельными строками. Я понял ,что сдесь нужно ставить счётчик ,только не могу понять как?Помогите пожалуйста.
Код:
#include "stdafx.h"
#include <stdio.h> 
#include "stdlib.h"
#define yourfile "yourfilename.txt"

int main(void) 
{
FILE *fp;
fp=fopen(yourfile,"r"); 
if(!fp)
   {printf("ERROR FILE NOT OPEN!");
      exit(1);
        }
    while (!feof(fp))                 
    { char ch;
	   
        ch=getc(fp);                      
        if (ch - 'a' <= 'f'-'a' )
		{     
          printf(" %c",ch); 
}
    } 
	
fclose(fp);
return 0;
}
Заранее спасибо!!!

Последний раз редактировалось Vasya94; 21.04.2013 в 16:22.
Vasya94 вне форума Ответить с цитированием
Старый 21.04.2013, 16:58   #4
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Массив из 6 значений, инициализируешь нулями, потом в блоке if увеличиваешь значение ячейки с индексом ch-'a' на 1.
Hemul вне форума Ответить с цитированием
Старый 21.04.2013, 18:30   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Код:
if (ch - 'a' <= 'f'-'a' ) //Принадлежит ли ch отрезку a-f
char == signed char, так что ch - 'a' может быть меньше нуля...
Somebody вне форума Ответить с цитированием
Старый 21.04.2013, 18:32   #6
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Вы можете помочь всё это реализовать в коде а то что -то не могу понять((
Vasya94 вне форума Ответить с цитированием
Старый 21.04.2013, 18:48   #7
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h> 
#include "stdlib.h"
#define yourfile "yourfilename.txt"

int main(void) 
{
FILE *fp;
fp=fopen(yourfile,"r"); 
int count [ 6];
for(int i=0;i<6;i++] count[i]=0;
if(!fp)
   {printf("ERROR FILE NOT OPEN!");
      exit(1);
        }
    while (!feof(fp))                 
    { char ch;
	   
        ch=getc(fp);                      
        if (ch - 'a' <= 'f'-'a' )
		{     
          count[ch-'a'] ++ ;
}
    } 
	
fclose(fp);
return 0;
}
Hemul вне форума Ответить с цитированием
Старый 21.04.2013, 19:04   #8
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Простите за дурацкия вопрос , но почему не хочет выводить количество символов?
Код:
#include "stdafx.h"
#include <stdio.h> 
#include "stdlib.h"
#define yourfile "yourfilename.txt"

int main(void) 
{int i;
FILE *fp;
fp=fopen(yourfile,"r"); 
int count [6];
for( i=0;i<6;i++)
	count[i]=0;
if(!fp)
   {printf("ERROR FILE NOT OPEN!");
      exit(1);
        }
    while (!feof(fp))                 
    { char ch;
	   
        ch=getc(fp);                      
       { if (ch - 'a' <= 'f'-'a' )
          count[ch-'a']++ ;
	 printf("%c  %d\n",ch,count[i]);


}
    } 

fclose(fp);
return 0;
}
Ищё раз спасибо за помощь.
Vasya94 вне форума Ответить с цитированием
Старый 21.04.2013, 19:28   #9
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Код:
printf("%c  %d\n",ch,count[i]);
замените на
Код:
printf("%c  %d\n",ch,count[ch - 'a']);
И если хотите поблагодарить, жмите на весы
Hemul вне форума Ответить с цитированием
Старый 21.04.2013, 19:55   #10
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Уже нажал , а можно ище вопрос , как сделать в программе , что б мне выводило только например а-3 ,е-7 ?
Код:
#include "stdafx.h"
#include <stdio.h> 
#include "stdlib.h"
#define yourfile "yourfilename.txt"

int main(void) 
{int i;
FILE *fp;
fp=fopen(yourfile,"r"); 
int count [6];
for( i=0;i<6;i++)
	count[i]=0;
if(!fp)
   {printf("ERROR FILE NOT OPEN!");
      exit(1);
        }
    while (!feof(fp))                 
    { char ch;
	   
        ch=getc(fp);                      
       { if (ch - 'a' <= 'f'-'a' )
          count[ch-'a']++ ;
	printf("%c %d\n",ch,count[ch - 'a']);


}
    } 

fclose(fp);
return 0;
}

Последний раз редактировалось Vasya94; 21.04.2013 в 20:25.
Vasya94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
4. Дан текстовый файл. Создать символьный файл trum Помощь студентам 0 03.06.2012 19:20
Дан символьный файл f. Определить, являются ли два первых символа файла цифрами (Pascal) vesdesvet Помощь студентам 2 25.11.2011 11:44
Символьный файл F. Записать в файл G компоненты файла F в обратном порядке,сначала все нечетные, затем чётные. Паскаль. ICE_LADY Помощь студентам 0 08.06.2011 17:32
Дан символьный файл f. Группы символов, разделенных пробелами и не содержащих пробелов внутри себя, назыв J__S(Юляшка) Общие вопросы C/C++ 3 13.04.2010 23:30
Дан символьный файл f. Получить копию файла в файле g MrJohanson Фриланс 9 08.04.2010 14:35