The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Удаление подстроки из строки, !*! ufobject, 21-Июл-06, 15:20  [смотреть все]
Привет, all!
Пытался найти простую функцию удаления заданной подстроки в строке (к примеру удаление всех пробелов из строки), перерыл кучу манов, но к сожалению так и не нашел. Можно конечно написать свою функцию, но хотелось бы воспользоваться какой-нибудь библиотечной... Может кто знает?
  • Удаление подстроки из строки, !*! ufobject, 17:59 , 21-Июл-06 (1)
    >Привет, 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, 18:26 , 21-Июл-06 (2)
      >    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, 19:26 , 21-Июл-06 (3)
        #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;
        }




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

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