- Удаление подстроки из строки, 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; }
|