我无法将字符更改为不同的颜色。我想将第一个字母(大写文本)更改为红色,就像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;
}
答案 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控制台仅支持文本下划线。仍然不支持其他效果。