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

C++中字符数组输出中的不同颜色字符,c++,colors,char,C++,Colors,Char,我很难把字符换成不同的颜色。我想把文本的第一个大写字母改成红色,就像Yandex一样。我尝试过不同的方法,但没有结果。SystemColor 4将全文更改为红色,但我只想将第一个字母更改为红色。请帮帮我。多谢各位 #include "stdafx.h" #include <string.h> #include <cstdlib> #include <iostream> using namespace std; int main() {

我很难把字符换成不同的颜色。我想把文本的第一个大写字母改成红色,就像Yandex一样。我尝试过不同的方法,但没有结果。SystemColor 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;
}

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;
}
在Linux平台上,ANSI转义序列应该可以正常工作。但Windows仅支持ANSI转义序列,因为在以前的版本中,Windows 10 TH2可以使用控制台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);
下表包含所有可能的颜色。


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

更好地使用ANSI转义码进行此类操作:您可以执行cout>>转义码红色>>字母>>转义码普通颜色>>文本的其余部分
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);