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

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

Восстановить пароль Регистрация
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
18.12.2012, 19:52     работа с подключаемым файлом #1
требуется подключить файл (в нем текст на англ. языке) и вывести текст на экран. затем необходимо запросить символ. программа должна вывести слово, в котором наибольшее число раз встречается этот символ. я нашел способ только как найти вообще количество совпадений.
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 книг. помогите пожалуйста написать эту часть программы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 19:52     работа с подключаемым файлом
Посмотрите здесь:

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от SSSprinter Посмотреть сообщение
вроде как нужно даже создавать 2 переменных. В одну сохранять текущее максимальное количество вхождений. В другую - слово. Проходить по всем словам. Если вхождение символа в очередное слово больше, чем в переменной, то менять ее значение.
Да, собственно это я и написал, не внимательно прочитал.
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 ?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 21:02     работа с подключаемым файлом #6
Цитата Сообщение от SSSprinter Посмотреть сообщение
тут нужно использовать scanf ?
Да, если работаешь с сишным функциями, то используй fscanf(). Это тот же scanf(), только для чтения из файла.
Цитата Сообщение от SSSprinter Посмотреть сообщение
так а как теперь подсчитывать вхождения заданного символа в слове???? я это и не умею делать, подскажите пжл
Ну если не будешь пользоваться <algorithm>, то сделай отдельную функцию, где проходи циклом по слову и считай кол-во нужных символов.
Цитата Сообщение от SSSprinter Посмотреть сообщение
шаг переменная, куда читать файл верный ?
39 строка char str[1024] = ""; /*переменная, куда читать файл*/
Файл нужно читать по словам, думаю такой большой буфер не нужен, я бы размер 64 сделал.
Yandex
Объявления
18.12.2012, 21:02     работа с подключаемым файлом
Ответ Создать тему
Опции темы

Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru