The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Удаление подстроки из строки"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Удаление подстроки из строки"  
Сообщение от ufobject email(??) on 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;
}

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Удаление подстроки из строки"  
Сообщение от Niam (ok) on 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;
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Удаление подстроки из строки"  
Сообщение от Kompot (??) on 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;
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Удаление подстроки из строки"  
Сообщение от UFO email(??) on 22-Июл-06, 09:42 
Огромное спасибо!
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру