@korsamc

Почему элемент вектора не присваивается переменной?

Преобладающим элементом в файле будем называть элемент, который встречается в нём N/2 раз. Определить и вывести все преобладающие элементы.
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;


int main(int argc, char* argv[])
{
   ifstream input("base.txt");
    char sym; int mycount;
    vector <char> vec;
    while(!input.eof())
    {
            input >> sym;
            vec.push_back(sym);

    }

    cout << "Source vector: ";
    for(int i = 0; i < vec.size()-1; i++)
        cout << vec[i] << " ";
    cout << endl;
    int number; int i = 0;
    do
    {

        mycount = count(vec.begin(),vec.end(),vec[i]);
        if((vec.size()-1)/2.0 == mycount )
            number = vec[i]; //
       cout << mycount << endl;
        i++;
    }while(i < vec.size()-1);
    cout << "Number = " << number << endl;


    input.close();


    return 0;
}

на выходе отображается "-2" помогите пожалуйста
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Наверное, ошибка в том, что не "который встречается в нём N/2 раз", а "как минимум N/2 раз, где N - количество уникальных элементов"? Т.е. у вас ошибка в строгом сравнении.
if((vec.size()-1)/2.0 == mycount ) // <<------

Вариант с std::map<char, int>
#include <iostream>
#include <fstream>
#include <map>

using namespace std;

int main(int argc, char* argv[]) {
    ifstream input("base.txt");    
    map<char, int> charFrequencyMap;

    cout << "Source vector: ";
    while( !input.eof() ) {
        char sym;
        input >> sym;
        cout << sym << " | ";
        charFrequencyMap[sym]++;
    }
    input.close();
    cout << endl;

    int charsCount = charFrequencyMap.size();

    cout << "Leading elements: ";
    for (pair<char, int> item : charFrequencyMap) {
        bool isLeading = item.second >= charsCount / 2.;
        if ( isLeading ) {
            cout << item.first << " | ";
        }
    }
    cout << endl;

    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы