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

задача на количество совпадений - C++

Восстановить пароль Регистрация
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
03.12.2012, 22:16     задача на количество совпадений #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
#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>
using namespace std;    /*чтобы не писать каждый раз std::cin*/ 
HANDLE hStdout; 
 
///-----------Функция для отображения русских букв-----------///
char bufRus[256];
 
char* Rus(const char* text)
{
CharToOemA(text,bufRus);
return bufRus;
}
////////////////////////////////////////////////////////////////
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,15);
    
    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");*/
    return 0;
 
  }
Добавлено через 2 часа 30 минут
хотя бы подскажите, в каком месте программу нужно править?

Добавлено через 22 часа 50 минут
как перезаписывать слово в массив ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 22:16     задача на количество совпадений
Посмотрите здесь:

C++ Задача на количество перестановок
C++ Программа по поиску совпадений слов в текстовом документе
Задача на c++. Количество нулей в младших разрядах C++
Задача на файлы. Вывести количество этих чисел и их сумму C++
C++ Поиск совпадений в Файле
C++ Поиск совпадений в файле
Задача №3069. Количество элементов, которые больше предыдущего C++
Составить программу для поиска совпадений в словах C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
03.12.2012, 23:27     задача на количество совпадений #2
пишу что-то подобное, надеюсь вам поможет
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
#include<iostream>
#include<cstring>
#include <clocale>
 
using namespace std;
int numb_words(char*);// функция вычисления кол-ва слов в строке
bool isrusalpha(char*);// isalpha() для кирилицы
int main()
{
    setlocale(LC_CTYPE, "rus");
    char* text = {"The decision to keep residents at nursing homes in flood- prone areas during the hurricane had dire consequences."};
    char** arrwords=new char*[numb_words(text)];
    int w=0; //счётчик слов
    int l=0; //счётчик букв в слове
    bool newword = false;// "флаг новое слово"
    
    //выделяем память для слов
    for(int n=0;n<=strlen(text);n++)
    {
        if(isalpha(*(text+n))) {l++;newword=true;}
        
        if((!isalpha(*(text+n))||n==(strlen(text))-1)&&newword)
        {
        cout<<"new word "<<w<<" "<<"letters " <<l<<endl;
        arrwords[w]=new char[l];
        l=0;w++;newword=false;}
    }
 
    //записываем слова в строки массива указателей на строки
    l=0;
    w=0;
    
    for(int n=0;n<=strlen(text);n++)
    {
        if(isalpha(*(text+n))) 
        {
        *(*(arrwords+w)+(l++))=*(text+n);
        newword=true;
        }
        if((!isalpha(*(text+n))||n==(strlen(text))-1)&&newword)
        {
        *(*(arrwords+w)+l)='\0';
        l=0;w++;newword=false;
        }
    }
            
    cout<<endl;
 
    cout<<numb_words(text)<<endl;
 
        for(int n=0;n<numb_words(text);n++)// выводим массив
    cout<<arrwords[n]<<endl;
    
    delete []arrwords;
        
    cout<<numb_words(text)<<endl;
    
    system("pause");
 
    return 0;
}
 
int numb_words(char*str)
    {
        bool newword = false;
        if (strlen(str)==0)
            return 0;
        int count_words;
        count_words=0;
        for(int n=0;n<strlen(str);n++)
        {
        if(isalpha(*(str+n))) {newword=true;}
        
        if((!isalpha(*(str+n))||n==(strlen(str))-1)&&newword)
        {
        count_words++;newword=false;}
        }
        return count_words;
    }
Добавлено через 2 минуты
Но для вашей цели слова в массив загонять необязательно
Yandex
Объявления
03.12.2012, 23:27     задача на количество совпадений
Ответ Создать тему
Опции темы

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