Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.08.2015
Сообщений: 5

Сортировка векторов

21.08.2015, 12:09. Показов 639. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу, которая считывает из файла все слова и записывает в векторы, при этом подсчитывается количество повторяющихся слов.
После этого хочу реализовать сортировку в алфавитном порядки, но что-то не так, при работе с малым количеством слов все ОК, если много - выдает ошибку.
Собственно выкладываю код на всеобщее обозрение. Буду рад конструктивным замечаниям...

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
80
81
82
83
84
85
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <windows.h>
using namespace std;
 
#define SIZE 1000
 
char my_tolower(char ch)
{
    for(char i='А'; i<='Я'; i++)
        if(i==ch) return (char)ch+32;
 
    return ch;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vector<char> str[SIZE];
    int amount_word[SIZE];
    char s, path[24];
    int i, j, temp, calcul = 0;
 
    for(i=0; i<SIZE; i++) amount_word[i] = 1;
 
    loop:
    cout << "Введите путь к файлу: ";
    cin >> path;
    ;
    ifstream in(path);
 
    if(!in) {
        cout << "Ошибка доступа" << endl;
        goto loop;
        }
 
    while(in.get(s)) {
    
        if(s==' ' || s=='\n') {
            if(calcul>0) {
                for(i=0; i<calcul; i++) {
                    if(str[i]==str[calcul]) {
                        amount_word[i]++;
                        str[calcul].clear();
                        calcul--;
                    }
                }
            }
                
            calcul++;
        }
 
        else if(s==',' || s=='.' || s=='!' || s=='?' || s==':'|| 
            s=='(' || s==')' || s=='«' || s=='»'|| s=='\n') continue;
        else str[calcul].push_back(my_tolower(s));
    }
 
    in.close();
 
    pair <vector <char>::iterator, vector <char>::iterator> results;
 
    for(i = calcul; i >= 0; i--)
        for(j = 0; j < i; j++) {
            if(str[j][0]>str[j+1][0]) str[j].swap(str[j+1]);
            else if(str[j][0]=str[j+1][0]) {
                results = mismatch(str[j].begin(), str[j].end(), str[j+1].begin());
                if(*results.first > *results.second)
                    str[j].swap(str[j+1]);
            }
        }
            
    for(i=0; i<=calcul; i++) {
        for(j=0; j<str[i].size(); j++) cout << str[i][j];
        cout << " -- " << amount_word[i] << endl;
    }
    
    cout << endl << calcul << endl;
 
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.08.2015, 12:09
Ответы с готовыми решениями:

Создать класс для обработки векторов разность векторов норму векторов
Создать класс для обработки векторов разность векторов норму векторов

Сортировка двух векторов одновременно
Всем доброго времени суток! Дано: набор отрезков, начала которых хранятся в векторе а, концы -- в векторе b. Задача:...

Сортировка векторов со строковыми переменными
День добрый. У меня возник вопрос, возможно ли сделать сортировку строковых переменных в массиве не в алфавитном порядке, а в заданном...

3
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.08.2015, 12:43
colonialist, вы хотите чтобы ваш код покритиковали или хотите узнать ответ на конкретный вопрос?
Критиковать не буду,а пару ссылок подкину:
1. Сортировка:
http://www.cplusplus.com/reference/algorithm/sort/
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 <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <map>
 
int main()
{
    std::string line;
    std::ifstream myfile("Words.txt");
    std::map<std::string,size_t> Word;
    if(myfile.is_open())
        {
        while (std::getline(myfile,line))
        {
            std::istringstream ist(line);
            std::string temp;
            while(ist>>temp)
                Word[temp]++;
        }
 
        myfile.close();
        }
    else
        std::cout << "Couldn't open file!" << std::endl;
 
    for (const auto &el : Word)
         std::cout << el.first << ' ' << el.second <<std::endl;
 
    return 0;
}
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,561
21.08.2015, 12:45
Цитата Сообщение от colonialist Посмотреть сообщение
считывает из файла все слова и записывает в векторы
Не вижу вектора слов, вижу только векторы символов.

Раз уж используешь вектор, то почему не пользуешься std::string и std::sort?
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
21.08.2015, 14:25
правда я тут увлёкся и удаляю повторяющиеся слова, но чуть изменить и всё будет как вам надо

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
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main(){
    vector<string> vectorOfWords;
    ifstream in("text.txt");
    string str;
    string::size_type first = 0 , last = first;
    while(in.good()){
        getline(in,str);
        while(first != string::npos){
            first = str.find_first_of("., ", first+1);
            string word(str,last,first - last);
            last = first+1;
            if(word.size() > 2) // всякие предлоги итд
                vectorOfWords.push_back(word);
        }
    }
    sort(vectorOfWords.begin() , vectorOfWords.end());
    auto end_unique = unique(vectorOfWords.begin() , vectorOfWords.end());
    vectorOfWords.erase(end_unique , vectorOfWords.end());
    for_each( vectorOfWords.begin() , vectorOfWords.end() , [](const string &str){cout<<str<<endl;});
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.08.2015, 14:25
Помогаю со студенческими работами здесь

Сортировка двух векторов (имена и возраст)
Имеется вектор строк, которые обозначают имена, и вектор чисел, означающий их возрасты. Нужно написать функцию sort() которая бы...

Сортировка векторов выбором по длине - обработка исключений
Здравствуйте! Я пишу курсовую по дисциплине &quot;Структуры и алгоритмы компьютерной обработки данных&quot; на тему &quot;Векторы: программная...

Сортировка двух векторов, создание третьего и запись в файл
Необходимо отсортировать два вектора int таким образом чтобы сохранить результат в третий вектор, выбрав только те числа которые...

Создать класс векторов, реализующий сложения и вычитания векторов
Помогите найти ошибку, так как неправильно выводятся массивы, то скорее всего не получается сформировать массив. А задание:создать класс...

Сортировка "Двумерных" векторов (матрицы) для Чайников
Приветствую, мне чужие коды на эту тему показались муторными, решил написать свою сортировку. Просто создаём новый вектор размера M*N и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru