Консоль C ++ - Цвет текста в строках Specifi c - PullRequest
0 голосов
/ 30 января 2020

Я делаю визуализатор сортировки в консольном приложении c ++. У меня есть алгоритм пузырьковой сортировки, работающий нормально, и он упорядочивает или сортирует вектор, полный строк, в соответствии с длиной, и вектор называется sort_visualize, а строки заполнены определенным количеством #. Каждый раз, когда производится новая сортировка или компоновка, я вызываю системную функцию («CLS»), чтобы очистить экран, а затем рисую (sort_visualize), чтобы снова нарисовать этот вектор строки. это дает эффект активной сортировки программы в режиме реального времени, когда пользователь наблюдает за ней, поскольку система («CLS»), я думаю, ограничивает скорость для каждого кадра. Теперь я хочу закрасить две сравниваемые строки в данный момент, чтобы они были окрашены в красный цвет, а затем после вызова функции рисования я сбрасываю их обратно на белый. Это в функции bubble_sort, где я размещаю комментарии о том, что я хочу, в моем коде. Как мне это реализовать? Вы можете проверить мой код, чтобы увидеть, как он работает, если хотите. Вот код:

    #include <iostream>
#include <vector>
#include <ctime>
#include "stdlib.h"
#include <string>
using namespace std;


//Function Prototypes
void Sort_Selection(int size, vector <int> &num_list, vector <string> &sort_visual);
void draw(vector <string> &sort_visual);
void Randomize_Setup(vector <int> &num_list, vector <string> &sort_visual, int size);

void bubble_sort(vector <string> &sort_visual);


int main()
{
    vector <string> sort_visual;
    vector <int> num_list;
    srand(time(NULL));

    //instructions
    cout << "USE FULLSCREEN FOR BEST VIEW" << endl;
    cout << "Enter the amount of numbers to sort (max 40 for best visibility): " << endl;
    int size;
    cin >> size;

    //sort selection
    Sort_Selection(size, num_list, sort_visual);

}






//FUNCTIONS*****************************************************************************


void Sort_Selection(int size, vector <int> &num_list, vector <string> &sort_visual)
{
    int sort_selection;
    //User Sort Selection
    while(sort_selection != 1)
    {
        //User Input and Options
        cout << "What type of sort would you like to use? Enter number" << endl;
        cout << "1. Bubble" << endl;
        cin>>sort_selection;

        //If statements of what to do
        if(sort_selection == 1)
        {
            Randomize_Setup(num_list, sort_visual, size);
            draw(sort_visual);

            //Ready to start
            system("pause");

            bubble_sort(sort_visual);
            break;
        }


    }
}

void Randomize_Setup(vector <int> &num_list, vector <string> &sort_visual, int size)
{
    //fill the number list with random numbers
    for (int i = 0; i < size; i++)
    {
        num_list.push_back(rand() % size);
    }

    //Fill the visualizer strings which will be bars with #'s depending on the numlist
    for (int i = 0; i < num_list.size(); i++)
    {
        sort_visual.push_back("");
        string temp;
        for (int j = 0; j < num_list.at(i); j++)
        {

            temp.push_back('#');
        }
        sort_visual.at(i) = temp;
    }
}


void draw(vector <string> &sort_visual)
{
    for (int i = 0; i < sort_visual.size(); i++)
    {
        cout << sort_visual.at(i) << endl;
    }
}



void bubble_sort(vector <string> &sort_visual)
{
    //bubble sort
    for (int j = 0; j < sort_visual.size(); j++)
    {
        for (int i = 0; i < sort_visual.size()-1; i++)
        {
            if (sort_visual.at(i).length() > sort_visual.at(i+1).length())
            {
                //I WANT TO MAKE THE TWO STRINGS BEING COMPARED , A DIFFERENT COLOUR OVER HERE I GUESS
                string temp = sort_visual.at(i);
                sort_visual.at(i) = sort_visual.at(i+1);
                sort_visual.at(i+1) = temp;
                system("CLS");
                draw(sort_visual);
                //THEN I RESET THE COLOURS TO NORMAL AFTER DRAWING THE BARS OUT because when the system("CLS") is called, and these exact strings are not being ompared, they should display white.
            }
        }
    }
}
...