Функция, которая удалит часть строки - PullRequest
0 голосов
/ 03 января 2019

Мне нужно создать функцию, которая будет удалять часть строки. Я могу использовать только stdio.h и stdlib.h.

Например: у меня есть эта строка: "Dad and mom /* and sister */ are at home". И мне нужно удалить часть, которая начинается с /* и заканчивается */. Таким образом, результат будет "Dad and mom are at home".

Ответы [ 3 ]

0 голосов
/ 03 января 2019

C на самом деле не имеет «строк» ​​как типа, с которым можно что-то делать. Вместо этого «строки» C представляют собой концепцию - последовательность символов в памяти, оканчивающихся символом NUL. В результате, чтобы что-то делать со строками, вам нужно понимать управление памятью.

Как правило, начинающие программисты (и примеры) работают с массивами фиксированного размера и смесью статических (постоянных) строк и строк в массивах фиксированного размера, которые должны соответствовать (что вы всегда должны проверять).

Итак, в вашем случае вы просто говорите, что у вас "есть строка", но не говорите, как или где у вас ее "есть". Если он находится в буфере памяти, который достаточно велик для его хранения, вы можете изменить буфер на месте, чтобы он содержал (более короткую) желаемую строку. Или вы можете скопировать его в другой буфер, достаточно большой для хранения измененной строки. Это будут две совершенно разные функции C, обе из которых можно описать как «удаление части строки»

0 голосов
/ 03 января 2019

str должен быть изменяемым

#include <stdio.h>
#include <string.h>


char *RemoveComment(char *str)
{
    char *start;
    char *end;


    do
    {
        start = strstr(str, "/*");
        end = strstr(str, "*/");
        if(start && end && end > start)
        {
            memmove(start, end + 2, strlen(end + 2) + 1);
        }
    }while (start && end);
    return str;
}


int main()
{

    char text[] = "D/*ad a*/nd mom /* and sister */ ar/*e at*/ ho/*me*/";
    printf("%s\n", RemoveComment(text));

    return 0;
}
0 голосов
/ 03 января 2019

Вы можете использовать strstr (https://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm), чтобы найти начальный разделитель и снова найти конечный разделитель.

Затем вы можете использовать memmove (http://www.cplusplus.com/reference/cstring/memmove/) для перемещенияоставшаяся часть строки.

Если вы можете удалить несколько частей, то вы можете сделать это в цикле.

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

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