C ++上char数组输出中不同颜色的字符

时间:2018-08-12 09:35:44

标签: c++ colors char

我无法将字符更改为不同的颜色。我想将第一个字母(大写文本)更改为红色,就像Yandex。我尝试了不同的方法来执行此操作,但没有结果。 System(“ Color 4”)将全文更改为红色,但是我只想将第一个字母更改为红色。请帮我。谢谢。

    #include "stdafx.h"
#include <string.h>  
#include <cstdlib>
#include <iostream>


using namespace std;


int main()
{

    string temp = "the DEVIL hides in the DETAILS";
    int space = 0;


    int length = temp.length();
    char *collect = new char[length+1];

    // Convert string to char loop
    for (int i = 0; i <= length; i++)
    {
        collect[i] = temp[i];   
    }

    //Changing char to lower or upper case
    for (int i = 0; i <= length; i++)
    {
        if (space == 1)
        {
            collect[i] = tolower(collect[i]);
        }
        if (space == 0)
        {
            collect[i] = toupper(collect[i]);
            space = 1;

        }
        if (collect[i] == ' ')
        {
            space = 0;
        }

    }
    cout <<  collect<<endl; 
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

C ++标准不支持标准化方法来编写彩色文本。如何向控制台输出添加颜色的最简单方法是使用ANSI转义序列。您要做的就是在文本周围添加一些特殊字符和颜色数字。

这是将彩色文本写入控制台的功能。

void ColorPrint(const char* text, int fg_color, int bg_color)
{
    static const char begin_sequence[]{0x1B,'[','\0'};
    static const char reset[]{0x1B,'[','0','m','\0'};

    cout << begin_sequence << fg_color << ';' << bg_color << 'm' << text << reset;
}

以下代码演示了如何使用此功能。它用浅红色的前景色和浅绿色的背景色来写“某些文本”。

ColorPrint("some text",91,102);

在Linux平台上,ANSI转义序列应该可以正常工作。但是Windows仅从Windows 10 TH2起才支持ANSI转义序列(在以前的版本中,您可以使用控制台API函数,例如SetConsoleTextAttribute)。而且,您必须通过调用应在程序开始时调用的API函数SetConsoleMode来启用ANSI转义序列支持。这是示例。

HANDLE ConsoleOutputHandle=CreateFileA("CONOUT$",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD Mode=0;

GetConsoleMode(ConsoleOutputHandle,&Mode);

Mode|=ENABLE_VIRTUAL_TERMINAL_PROCESSING;

SetConsoleMode(ConsoleOutputHandle,Mode);

CloseHandle(ConsoleOutputHandle);


// Now you should see this text in red/green colors.
ColorPrint("some text",91,102);

下表包含所有可能的颜色。 ANSI escape sequence color table

根据要写入的控制台类型,它可以支持其他效果,例如,文本闪烁或文本下划线。 Windows 10控制台仅支持文本下划线。仍然不支持其他效果。