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

Определить слово с наибольшим вхождением заданного символа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
11.11.2012, 22:39     Определить слово с наибольшим вхождением заданного символа #1
здравствуйте. надо написать программу, которая будет определять слово с наибольшим вхождением заданного символа, из текста, который мы задаем ранее.
в программе я только подключил библиотеки, и написал команду, которая читает файл.
а что делать дальше? на какие темы гуглить? какие примерно команды пригодятся для написания программы?
правильно ли я думаю, что надо как-то создать массив, в который будет записываться то самое слово, и сравнивать каждое последующее слово с ним, и если там больше того самого символа, то записывать в этот массив новое слово?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 22:39     Определить слово с наибольшим вхождением заданного символа
Посмотрите здесь:

C++ Из файла ввести слово и найти в нём последнее вхождение заданного символа, если он есть
C++ Определить первое вхождение символа "d" в строке и вывести слово, в котором оказался этот символ.
Определить натуральное число не больше заданного n с наибольшим числом простых делителей C++
C++ Дан текстовый файл ( определить слово с наибольшим количеством букв и вставить его на начало и конец строки)
Pascal -> C++ (В данном тексте в словах четной длины, начинающихся с заданного символа, определить количество гласных) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 01:22     Определить слово с наибольшим вхождением заданного символа #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
#include <algorithm>
#include <array>
#include <iostream>
#include <string>
#include <vector>
 
struct result
{
   std::string word;
   int count = -1;
};
 
int main()
{
   std::array<std::string, 4> atext = {{"Hello", "allocate", "around", "alalala"}};
   std::vector<std::string> text(atext.cbegin(), atext.cend());
   const char symbol = 'a';
   
   result answer;
   for (const auto& i : text)
   {
      const int count = std::count(i.cbegin(), i.cend(), symbol);
      if (answer.count < count)
      {
         answer.count = count;
         answer.word = i;
      }
   }
   std::cout << answer.word << " " << answer.count << std::endl;
   return 0;
}

Т.е. идея такая - создаете 2 переменных. В одну сохраняете текущее максимальное количество вхождений. В другую - слово.
Проходите по всем словам. Если вхождение символа в очередное слово больше, чем в переменной, то меняете ее значение.
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
12.11.2012, 22:45  [ТС]     Определить слово с наибольшим вхождением заданного символа #3
I.M.,
большое спасибо. только хочу еще сам сделать, свой вариант, не подскажите какие темы гуглить?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 22:55     Определить слово с наибольшим вхождением заданного символа #4
Циклы, нахождение количества определенных элементов в массиве, поиск максимума/минимума в массиве
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
20.01.2013, 13:31  [ТС]     Определить слово с наибольшим вхождением заданного символа #5
I.M.,
а если я вот таким образом ищу через strchr можно ли сделать, чтобы находилось слово с максимальным числом вхождением символа? а то моя программа находит все слова с этим символом.
Кликните здесь для просмотра всего текста
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
#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 _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 a; //переменная, хранящая введенный символ
    char b; //переменная, где храниться слово, в котором содержится наибольшее число раз введенный символ
    int n=1;  //количество символов в слове, совпадающих с введенным
    cin>>a;
    printf("\n");
    fp=fopen ("my_file.txt","r");
    while((fscanf (fp,"%s",str))!=EOF) /*%s - прочитать строку*/
//fscanf (stream, format-string [, argument ...]) Функция fscanf считывает данные из текущей позиции потока stream в место, определяемое заданием аргументов arguments (если они есть)
    {
        if(strchr(str,a)) /*Функция strchr() возвращает указатель на местонахождение первого совпадения с символом c в строке s ... а если символ не найден, то возвращают NULL*/
        {
            cout<<str;
            printf("\n");
            n=0;
        }
    }
    if(n==1) printf(Rus("Введенный символ отсутсвует\n"));
 
 
    return 0;
}

я Вашу идею про переменные понял, и она наверно наиболее правильная, только не знаю как там с синтаксисом.
Yandex
Объявления
20.01.2013, 13:31     Определить слово с наибольшим вхождением заданного символа
Ответ Создать тему
Опции темы

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