2015-04-25 3 views
0

Я только что столкнулся с проблемой, с которой я застрял. Я должен удалить цветовые коды из массив символов в C. Допустим, сообщение это:Удаление цветовых кодов из массива символов в C

[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]; 
     } 
    } 
} 

Это не работает должным образом (цветовые коды не удаляются), и я не знаю, что не так. Есть ли лучший или простой способ сделать это?

Заранее спасибо.

ответ

0

Я бы просто наблюдать за открытием {, увидеть, если есть } 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; 
} 
+0

Спасибо. Это сработало. –