Поиск / замена массива символов, на которые указывает символьный указатель в c ++ - PullRequest
0 голосов
/ 30 мая 2011

Вот мой вызов функции:

removeTags(*buf, bufSize);

который звонит:

void removeTags(char* dataBlock, unsigned long size) 
{
    char* start = dataBlock; 
    char* end = dataBlock + size;

    while(start < end)
    {
    //How do I replace the characters "\abc" with just nothing, ''.
        }

Я хочу заменить любые вхождения символов \ abc ничем.

Ответы [ 3 ]

2 голосов
/ 30 мая 2011

Как только вы найдете экземпляр \abc, просто переместите все символы после \abc назад на четыре позиции (четыре, потому что \abc - это четыре символа длиной) (возможно, используя memmove).

Например:

one two \abc three
        <----^ copy everything from the 't' down backwards over the \abc

Обратите внимание, что после того, как вы это сделаете, ваш указатель end станет недействительным, поэтому вам придется его обновить.

Нахождение позиции строки в другой строке можно выполнить с помощью strstr для const char* с или std::string::find для std::string с. Конечно, если вы используете std::string, то вы можете просто использовать std::string::replace.

0 голосов
/ 30 мая 2011

Вы можете использовать regex_replace из библиотеки Boost, если это не домашняя работа.

0 голосов
/ 30 мая 2011

Вы удаляете ненужные символы, перемещая все следующие символы вниз.

Вы должны быть в состоянии сделать это за один проход, имея from_pointer и to_pointer, и либо скопировать текущий из from_pointer в to_pointer, либо увеличить from_pointer, чтобы пропустить пропущенные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...