Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
#1

Работа с подключаемым файлом - C++

18.12.2012, 19:52. Просмотров 369. Ответов 5
Метки нет (Все метки)

требуется подключить файл (в нем текст на англ. языке) и вывести текст на экран. затем необходимо запросить символ. программа должна вывести слово, в котором наибольшее число раз встречается этот символ. я нашел способ только как найти вообще количество совпадений.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "stdio.h"      /*файл ввода/вывода при работе с подключаемым текстом*/
#include "stdafx.h"
#include "stdlib.h"
#include <string.h>     /*библиотека для работы со строками*/
#include "iostream"     /*для организации ввода-вывода*/
#include <windows.h>    /*для русского языка*/
#include <conio.h>      /* содержит функции для работы с экраном */
#include <ctype.h>
#include <locale.h>
 
#include <clocale>
#include<cstring>
 
 
using namespace std;    /*чтобы не писать каждый раз std::cin*/ 
HANDLE hStdout; 
 
///-----------Функция для отображения русских букв-----------///
char bufRus[256];
 
char* Rus(const char* text)
{
CharToOemA(text,bufRus);
return bufRus;
}
////////////////////////////////////////////////////////////////
 
 
int numb_words(char*);// функция вычисления кол-ва слов в строке
//bool isrusalpha(char*);// isalpha() для кирилицы
 
 
int _tmain(int argc, _TCHAR* argv[])
{   
//  setlocale(LC_ALL,"Rus");                    /*для отображенения русского языка*/
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, BACKGROUND_INTENSITY); 
    FILE *fp=fopen ("my_file.txt","r");         /*открытие файла на чтение (относительный путь файла)*/
    if (NULL == fp)                             /*проверяем наличие файла*/
    {   
        SetConsoleTextAttribute(hStdout,12);    /*задаём цвет текста*/
        printf (Rus("Не удалось открыть файл!\n"));
        return 0;   
    }
 
    char str[1024] = "";                        /*переменная, куда читать файл*/
    int i=0;
    while (!feof (fp)) //проверка признака конца файла
    {
    str[i]=fgetc(fp);
    SetConsoleTextAttribute(hStdout, 11);
    printf("%c", str[i]);
    i++;    
    }
 
    fclose(fp);                                 /*закрытие соединения с файлом*/
 
    printf(Rus("\n\n"));
    SetConsoleTextAttribute(hStdout,14);
    printf(Rus("Введите символ или букву на английском языке\nПрограмма определит слово с наибольшим вхождением заданного символа\n"));
    SetConsoleTextAttribute(hStdout,12);
 
 
// основное действие программы
    char ch = 0;
    ch = getch(); /*запрашиваем 1 символ с клавиатуры*/ 
    printf("%c", ch); /*выводим символ на экран*/
    printf(("\n"));
    int sovp=0;
 
    for (int index=0; index<= sizeof(str); index++)
    {
    if (str[index] == ch) sovp++;
    }
 
        printf(Rus("\nсовпадений в тексте:  ")); 
        printf ("%i\n", sovp); //*выводим символ на экран*
 
    /*printf("Слово с наибольшим вхождение заданного символа\n");*/
    
 
 
 
 
 
 
    system("pause");
 
    return 0;
}
вот после того как программа считывает символ и выводит его, как я понимаю, нужно искать слова с этим символом, и записывать их в переменную. потом условие, если в той переменной меньше того символа, а есть слово с большим, то перезаписываем.
для меня проблема в том, что я не знаю, как искать это слово, и считать в нем количество символов. похожих примеров не могу найти, только на других языках, в книжках то же про это ничего не нашел. просмотрел уже больше 5 книг. помогите пожалуйста написать эту часть программы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с подключаемым файлом (C++):

Переделать программу так, чтобы каждый из кейсов был подключаемым модулем - C++
При модульном программировании к основному модулю программы подключаются несколько вспомогательных модулей, в которых реализованы процедуры...

работа с файлом) - C++
Помогите пжлст написать прогу.Задание: Найти среднее количество знаков препинания в абзаце.Текст считывать с файла. Добавлено через...

Работа с файлом - C++
В двумерном массиве подсчитать сумму элементов в каждом столбце и вывести ответы в файл! Пример 1 2 3 4 5 6 7 8 9 в файл...

Работа с файлом - C++
Добрый вечер форумчане. Прошу помочь мне в написание программы. Речь идет о простой последовательности. Количество чисел, равных...

Работа с файлом - C++
вот смотрите есть файл chisla.txt В нем содержатся цифры ( Например 101 258 164) Как мне изъять из файла ТОЛЬКО 1 число (например 101)???

Работа с файлом - C++
Имеется текст документа, состоящий из нескольких параграфов. Каждый параграф начинается с заголовка и отделен пустой строкой от предыдущего...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
18.12.2012, 19:56 #2
Цитата Сообщение от SSSprinter Посмотреть сообщение
требуется подключить файл
так нужно подключить файл или прочитать его из программы? Потому что это разные вещи и в твоем коде файл как раз читается, а не подключается.
1
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
18.12.2012, 20:07  [ТС] #3
Kastaneda,
задание звучит так: Задан текст. Определить слово с наибольшим вхождением заданного символа.
нужно подключить файл, вывести текст на консоль, и найти слово

Добавлено через 1 минуту
вы хотите сказать, что я рано закрыл соединение с файлом?

Добавлено через 2 минуты
вроде как нужно даже создавать 2 переменных. В одну сохранять текущее максимальное количество вхождений. В другую - слово. Проходить по всем словам. Если вхождение символа в очередное слово больше, чем в переменной, то менять ее значение.
тогда после того, как я вывожу текст на экран, необходимо его как то в массив загнать?
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
18.12.2012, 20:24 #4
Цитата Сообщение от SSSprinter Посмотреть сообщение
вы хотите сказать, что я рано закрыл соединение с файлом?
Да не, не в этом дело. Прочитать файл и подключить файл это разные вещи, ну ладно, пропустим.

Логика программы организована не правильно, сначала нужно считать нужный символ, совпадение которого следует искать, потом читать файл по словам, подсчитывая вхождение заданного символа в слове. Это число хранить в переменной, если очередное слово содержит больше вхождений символа, чем сдержит переменная, то присваеваем это значение переменной, если нет, то читаем следующее слово. Ну и само слово тоже следует хранить отдельно, чтоб не искать его потом еще раз.

Добавлено через 1 минуту
Цитата Сообщение от SSSprinter Посмотреть сообщение
вроде как нужно даже создавать 2 переменных. В одну сохранять текущее максимальное количество вхождений. В другую - слово. Проходить по всем словам. Если вхождение символа в очередное слово больше, чем в переменной, то менять ее значение.
Да, собственно это я и написал, не внимательно прочитал.
1
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
18.12.2012, 20:53  [ТС] #5
начало верное ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdio.h"      /*файл ввода/вывода при работе с подключаемым текстом*/
#include "stdafx.h"
#include "stdlib.h"
#include <string.h>     /*библиотека для работы со строками*/
#include "iostream"     /*для организации ввода-вывода*/
#include <windows.h>    /*для русского языка*/
#include <conio.h>      /* содержит функции для работы с экраном */
#include <ctype.h>
#include <locale.h>
 
#include <clocale>
#include<cstring>
 
using namespace std;    /*чтобы не писать каждый раз std::cin*/ 
 
///-----------Функция для отображения русских букв-----------///
char bufRus[256];
 
char* Rus(const char* text)
{
CharToOemA(text,bufRus);
return bufRus;
}
////////////////////////////////////////////////////////////////
 
int _tmain(int argc, _TCHAR* argv[])
{
printf(Rus("Введите символ или букву на английском языке\nПрограмма определит слово с наибольшим вхождением заданного символа\n"));
    char ch = getch();
    printf("%c", ch); /*выводим символ на экран*/
    printf(("\n"));
    FILE *fp=fopen ("my_file.txt","r");         /*открытие файла на чтение (относительный путь файла)*/
    if (NULL == fp)                             /*проверяем наличие файла*/
    {   
 
        printf (Rus("Не удалось открыть файл!\n"));
        return 0;   
    }
        char str[1024] = "";                        /*переменная, куда читать файл*/
    int i=0;
    while (!feof (fp)) //проверка признака конца файла
    {
    str[i]=fgetc(fp);
    printf("%c", str[i]);
    i++;    
    }
 
    return 0;
}
Добавлено через 1 минуту
шаг переменная, куда читать файл верный ?
39 строка char str[1024] = ""; /*переменная, куда читать файл*/

Добавлено через 7 минут
так а как теперь подсчитывать вхождения заданного символа в слове???? я это и не умею делать, подскажите пжл

Добавлено через 11 минут
тут нужно использовать scanf ?
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
18.12.2012, 21:02 #6
Цитата Сообщение от SSSprinter Посмотреть сообщение
тут нужно использовать scanf ?
Да, если работаешь с сишным функциями, то используй fscanf(). Это тот же scanf(), только для чтения из файла.
Цитата Сообщение от SSSprinter Посмотреть сообщение
так а как теперь подсчитывать вхождения заданного символа в слове???? я это и не умею делать, подскажите пжл
Ну если не будешь пользоваться <algorithm>, то сделай отдельную функцию, где проходи циклом по слову и считай кол-во нужных символов.
Цитата Сообщение от SSSprinter Посмотреть сообщение
шаг переменная, куда читать файл верный ?
39 строка char str[1024] = ""; /*переменная, куда читать файл*/
Файл нужно читать по словам, думаю такой большой буфер не нужен, я бы размер 64 сделал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 21:02
Привет! Вот еще темы с ответами:

If работа с файлом - C++
Часть кода в которой я записываю строки в файл,по параметрам которые совпадают,как записать те строки в которых нет совпадение? как...

Работа с файлом - C++
Файл не открывается для чтения..... программа создает алфавит для исходного текста....помогите пожалуйста..:( Уже все перепробовала.... ...

Работа с файлом - C++
Доброго времени суток . Нужна помощь . Суть задания заключается в том , чтобы считать информацию из файла , записать ее в какую-то...

Работа с файлом - C++
char *FileName =&quot;123.txt&quot;; int h=fileno(fopen(FileName,&quot;r+&quot;)); FileName=&quot;\0&quot;; Как мне теперь используя только h работать с файлом?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.12.2012, 21:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru