Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
1

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

05.06.2013, 19:46. Просмотров 1628. Ответов 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
Ответы с готовыми решениями:

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

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

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

Обнулить все элементы массива, которые встречаются более двух раз
Есть масив розмером n. Обнулить все елементы масива , что встречаются более 2...

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

13
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.06.2013, 20:04 2
Файл нужен, с которым зацикливается.
0
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
05.06.2013, 20:11  [ТС] 3
содержимое файла:aaannn, по идее должен выдавать a и n, а выдаёт то, что на скрине и зацикливается
0
Миниатюры
Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз  
Olivеr
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
05.06.2013, 21:51 4
C++
1
2
        f.clear(ios::eofbit);
        f.seekg(pos);
в строке 32
0
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
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Эксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
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 / 21
Регистрация: 02.06.2013
Сообщений: 181
05.06.2013, 23:34  [ТС] 7
MrGluck, логшпг

Добавлено через 6 минут
MrGluck, последнее сообщение случайно отправил. А почему если не сбрасывать флаги ошибок, то курсор ставится не на заданную в аргументе метода seekg() позицию, а на позицию -1. Просто я проверял, tellg(), после этого возвращает -1
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
05.06.2013, 23:41 8
Denis123456789, скорее всего у вас EOF == -1, некое число, обозначающее "ошибку".
0
Olivеr
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
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 / 21
Регистрация: 02.06.2013
Сообщений: 181
05.06.2013, 23:55  [ТС] 10
MrGluck, не могу понять какую роль играют флаги ошибок на установку курсора в то или иное место?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
06.06.2013, 00:03 11
Denis123456789, иначе оно не даст дальше считать, будет думать, что поток находится в состоянии ошибки.
0
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
06.06.2013, 00:13  [ТС] 12
MrGluck, а почему поток вообще оказывается в состоянии ошибки?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
06.06.2013, 00:13 13
Denis123456789, потому что мы достигли конца файла EOF - ошибка
1
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2013, 00:14 14
Цитата Сообщение от Denis123456789 Посмотреть сообщение
не могу понять какую роль играют флаги ошибок на установку курсора в то или иное место?
Когда установлен флаг ошибки, поток находится в нерабочем состоянии, т.е. ничего не работает, в том числе и передвижение курсора.
1
06.06.2013, 00:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 00:14

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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