C++中字符数组输出中的不同颜色字符
我很难把字符换成不同的颜色。我想把文本的第一个大写字母改成红色,就像Yandex一样。我尝试过不同的方法,但没有结果。SystemColor 4将全文更改为红色,但我只想将第一个字母更改为红色。请帮帮我。多谢各位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() {
#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);