从 C 中的 char 数组中删除颜色代码
Removing color codes from a char array in C
我刚想出了一个我一直困扰的问题。我必须从 C 中的 char 数组中删除颜色代码。假设消息是这样的:
[15:51:55] [error]: {ffffff}you already have this vehicle!r "police car (lspd)" (modelid: 596, vehicleid: 306)
颜色代码是在 { 和 } 字符内的代码。我写了这个函数,第一个参数是原始消息,第二个参数是存储原始消息不带颜色代码的数组。
void eliminarCodigosColores(char *mensaje, char *destino)
{
for (int i = 0; i < strlen(mensaje); i++)
{
if ((mensaje[i] != '{' && mensaje[i + 7] != '}') || (mensaje[i - 1] != '{' && mensaje[i + 6] != '}') ||
(mensaje[i - 2] != '{' && mensaje[i + 5] != '}') || (mensaje[i - 3] != '{' && mensaje[i + 4] != '}') ||
(mensaje[i - 4] != '{' && mensaje[i + 3] != '}') || (mensaje[i - 5] != '{' && mensaje[i + 2] != '}') ||
(mensaje[i - 6] != '{' && mensaje[i + 1] != '}') || (mensaje[i - 7] != '{' && mensaje[i] != '}'))
{
*destino++ = mensaje[i];
}
}
}
它不能正常工作(颜色代码没有被删除),我不知道出了什么问题。有更好或更简单的方法吗?
提前致谢。
我会简单地观察开头 {
,看看后面是否有 }
7 个字符,然后跳过所有字符:
void eliminarCodigosColores(const char *mensaje, char *destino)
{
int i = 0, j = 0;
while ( i < strlen(mensaje) )
{
if ((i + 7 < strlen(mensaje)) &&
(mensaje[i] == '{') &&
(mensaje[i + 7] == '}'))
{
i += 8;
}
else
{
destino[j++] = mensaje[i++];
}
}
destino[j] = 0;
}
我刚想出了一个我一直困扰的问题。我必须从 C 中的 char 数组中删除颜色代码。假设消息是这样的:
[15:51:55] [error]: {ffffff}you already have this vehicle!r "police car (lspd)" (modelid: 596, vehicleid: 306)
颜色代码是在 { 和 } 字符内的代码。我写了这个函数,第一个参数是原始消息,第二个参数是存储原始消息不带颜色代码的数组。
void eliminarCodigosColores(char *mensaje, char *destino)
{
for (int i = 0; i < strlen(mensaje); i++)
{
if ((mensaje[i] != '{' && mensaje[i + 7] != '}') || (mensaje[i - 1] != '{' && mensaje[i + 6] != '}') ||
(mensaje[i - 2] != '{' && mensaje[i + 5] != '}') || (mensaje[i - 3] != '{' && mensaje[i + 4] != '}') ||
(mensaje[i - 4] != '{' && mensaje[i + 3] != '}') || (mensaje[i - 5] != '{' && mensaje[i + 2] != '}') ||
(mensaje[i - 6] != '{' && mensaje[i + 1] != '}') || (mensaje[i - 7] != '{' && mensaje[i] != '}'))
{
*destino++ = mensaje[i];
}
}
}
它不能正常工作(颜色代码没有被删除),我不知道出了什么问题。有更好或更简单的方法吗?
提前致谢。
我会简单地观察开头 {
,看看后面是否有 }
7 个字符,然后跳过所有字符:
void eliminarCodigosColores(const char *mensaje, char *destino)
{
int i = 0, j = 0;
while ( i < strlen(mensaje) )
{
if ((i + 7 < strlen(mensaje)) &&
(mensaje[i] == '{') &&
(mensaje[i + 7] == '}'))
{
i += 8;
}
else
{
destino[j++] = mensaje[i++];
}
}
destino[j] = 0;
}