Привет, all!
Пытался найти простую функцию удаления заданной подстроки в строке (к примеру удаление всех пробелов из строки), перерыл кучу манов, но к сожалению так и не нашел. Можно конечно написать свою функцию, но хотелось бы воспользоваться какой-нибудь библиотечной... Может кто знает?
>Привет, 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;
}Очень хотелось бы выслушать коментарии по поводу этого кода. Корректно ли будет таким образом удалять символ из строки и как можно оптимизировать этот код? Помогите пожалуйста, хочется корректного и стабильного решения.
> 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;
}
#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;
}
Огромное спасибо!