URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5590
[ Назад ]

Исходное сообщение
"Удаление подстроки из строки"

Отправлено ufobject , 21-Июл-06 15:20 
Привет, all!
Пытался найти простую функцию удаления заданной подстроки в строке (к примеру удаление всех пробелов из строки), перерыл кучу манов, но к сожалению так и не нашел. Можно конечно написать свою функцию, но хотелось бы воспользоваться какой-нибудь библиотечной... Может кто знает?

Содержание

Сообщения в этом обсуждении
"Удаление подстроки из строки"
Отправлено ufobject , 21-Июл-06 17:59 
>Привет, all!
>Пытался найти простую функцию удаления заданной подстроки в строке (к примеру удаление
>всех пробелов из строки), перерыл кучу манов, но к сожалению так
>и не нашел. Можно конечно написать свою функцию, но хотелось бы
>воспользоваться какой-нибудь библиотечной... Может кто знает?


Недождавшись ответа, все-таки решил написать свою функцию. Вот ее реализация:

char* strrem (char *string, char *subs)
{
    char *res ="";
    char result[strlen(string)];
    char buf[strlen(string)];
    int j=0;

    if (strlen(string)<1)
        return res;

    strcpy (buf,string);
    for (int i=0; i!=strlen(string); i++)
        if (buf[i]!=subs[0]) result[j++]=buf[i];
    res = (char*)calloc (strlen(string),sizeof(char*));
    strcpy (res,result);
    return res;
}

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


"Удаление подстроки из строки"
Отправлено Niam , 21-Июл-06 18:26 
>    char result[strlen(string)];
>    char buf[strlen(string)];
> res = (char*)calloc (strlen(string),sizeof(char*));


следует добавить еще по байтику - нулевой символ

>   if (strlen(string)<1)
>        return res;
проверку на длину лучше сделать перед выделением памяти для буфера и результата.

Вот как я бы сделал:

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


char* strrem (char *string, char *sub)
{
int sublen = strlen(sub);

char *found, *buffer = NULL;

if ( (found=strstr(string,sub))!=NULL)
{
   buffer = (char *)malloc(strlen(string)+1)
   strncpy(buffer,string,(int)(found-string));
   strcat(buffer,found+sublen);
}

   return buffer;
}

int main(int argc, char **argv)
{
        printf("\n%s\n",strrem("blabla","ab"));


        return 0;
}


"Удаление подстроки из строки"
Отправлено Kompot , 21-Июл-06 19:26 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void strrem ( char * _str_, char * _substr_ )
{
    char * found;
    char * ptr;
    int substr_len = strlen(_substr_);
    
    while(1)
    {
        ptr = found = NULL;
        found = strstr( _str_ , _substr_ );
        if( found != NULL )
        {  
            ptr = &(found[substr_len]);
            while(1)
            {
                *found = *ptr;
                if( *ptr == 0 )
                {
                    break;
                }
                found++;
                ptr++;
            }
        }
        else
        {
            return;
        }
    }

    return;
}

int main(int argc, char **argv)
{
    char str[22] = "0a0a1230a4560a7890a\0";
    char substr[3] = "0a\0";

    strrem(str, substr );
    printf("\n%s\n",str );


    return 0;
}


"Удаление подстроки из строки"
Отправлено UFO , 22-Июл-06 09:42 
Огромное спасибо!