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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
#1

Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз - C++

05.06.2013, 19:46. Просмотров 1299. Ответов 13
Метки нет (Все метки)

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
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int _tmain()
{
    ifstream f ("d:\\base1.txt");
    char a,b;
    int n=4;
    int kolvo;
    int pos;
    f.get(a);
    while (!f.eof())
    {
        pos=f.tellg();
        f.seekg(0);
        kolvo=1;
        b=f.get();
    while (!f.eof())
    {
        if (a==b)
        {
            if (((int)f.tellg()-1)>(pos-1))
            kolvo++;
            else if (((int) f.tellg()-1)<(pos-1))
                break;
        }
        b=f.get();
    }
    if (kolvo>n/2) cout<<a<<endl;
    f.seekg(pos);
    f.get(a);
    }
    return 0;
}
[/CPPQT]
Здравствуйте. Есть файл. В нем нужно найти и вывести на экран все элементы, которые которые повторяются более N/2 раз. Программа зацикливается. Почему?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 19:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз (C++):

Написать программу, которая убирает с массива все элементы, которые повторяются больше трех раз - C++
Задано массив целых чисел A(n), n &lt;= 500 . Написать программу, которая убирает с А все элементы , которые повторяются больше трех раз, а...

Каждое второе число в массиве, которые повторяются более 2 раз, удалить - C++
На языке С написать программу. Условия: Дан массив a. Каждое второе число,которые повторяются более 2 раз, удалить. У меня тут...

Задать массив из 20 целочисленных элементов и обнулить те числа которые повторяются более 2х раз - C++
Задать массив из 20 целочисленных элементов и обнулить те числа которые повторяются более 2х раз. Я не понял как это делается, помогите плиз

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

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

Написать функцию, которая выводит на экран все слова за данной строки, в которые заданная буква входит N или более раз. - C++
нужна помошь! ни как не могу разобраться В главной программе ввести с клавиатуры две строки длиной до 50...80 символов соответственно,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.06.2013, 20:04 #2
Файл нужен, с которым зацикливается.
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
05.06.2013, 20:11  [ТС] #3
содержимое файла:aaannn, по идее должен выдавать a и n, а выдаёт то, что на скрине и зацикливается
0
Миниатюры
Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз  
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
05.06.2013, 21:51 #4
C++
1
2
        f.clear(ios::eofbit);
        f.seekg(pos);
в строке 32
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
05.06.2013, 22:53  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
C++
1
2
        f.clear(ios::eofbit);
        f.seekg(pos);
в строке 32
Да, спасибо, работает. А в чём суть строк f.clear(ios::eofbit)?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
05.06.2013, 23:09 #6
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
#include <iostream>
#include <fstream>
#include <unordered_map>
 
typedef std::unordered_map<char, int> umap;
 
int main()
{
    std::ifstream ifs("input.txt");
    if (!ifs)
        return 1;
    umap m;
    char c;
    int counter = 0;
 
    while(!ifs.eof() && ifs >> c)
    {
        ++m[c];
        counter++;
    }
    for (auto w : m)
        if (w.second > counter / 2)
            std::cout << w.first << " - " << w.second << std::endl;
    std::cout << std::endl;
}
Добавлено через 1 минуту
Denis123456789, сначала сбрасываем флаги ошибок, потом устанавливаем курсор считывания на начало файла.
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
05.06.2013, 23:34  [ТС] #7
MrGluck, логшпг

Добавлено через 6 минут
MrGluck, последнее сообщение случайно отправил. А почему если не сбрасывать флаги ошибок, то курсор ставится не на заданную в аргументе метода seekg() позицию, а на позицию -1. Просто я проверял, tellg(), после этого возвращает -1
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
05.06.2013, 23:41 #8
Denis123456789, скорее всего у вас EOF == -1, некое число, обозначающее "ошибку".
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
05.06.2013, 23:46 #9
Denis123456789, по поводу seekg:
If the eofbit flag is set before the call, the function fails (sets failbit and returns).
То есть, когда seekg вызывается для потока, у которого поднят флаг eofbit, то функция не меняет курсор. В C++11 seekg автоматически сбрасывает этот флаг.
1
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
05.06.2013, 23:55  [ТС] #10
MrGluck, не могу понять какую роль играют флаги ошибок на установку курсора в то или иное место?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
06.06.2013, 00:03 #11
Denis123456789, иначе оно не даст дальше считать, будет думать, что поток находится в состоянии ошибки.
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
06.06.2013, 00:13  [ТС] #12
MrGluck, а почему поток вообще оказывается в состоянии ошибки?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
06.06.2013, 00:13 #13
Denis123456789, потому что мы достигли конца файла EOF - ошибка
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2013, 00:14 #14
Цитата Сообщение от Denis123456789 Посмотреть сообщение
не могу понять какую роль играют флаги ошибок на установку курсора в то или иное место?
Когда установлен флаг ошибки, поток находится в нерабочем состоянии, т.е. ничего не работает, в том числе и передвижение курсора.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 00:14
Привет! Вот еще темы с ответами:

Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех раз, для каждого из эти - C++
мне нужно срочно!!!! помоги чем сможете. С++ Добавлено через 19 секунд Вот задание Дана символьная строка. Вывести на экран только...

Пользователь вводит 8 чисел, вывести числа которые повторяются 2 или больше раз - C++
Я понимаю, в средние века за такой код сжигали на костре. Но я только учусь. Подскажите как сделать правильнее. #include...

Вывести элементы массива, которые повторяются ровно два раза - C++
Массив создать динамический. Язык - С++ Пример: Пусть даны числа: 1,2,5,2,3,3,3, Тогда вывести: 2

Найти все элементы массива, которые встречаются в нем не более одного раза - C++
Нужна помощь. Задание такого : в двумерном массиве А найти все элементы, которые встречаются в нем не более одного раза и записать эти...


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

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

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