Задача:
Есть строка; массив разделителей; слово, которое нужно заменить; слово, на которое нужно заменить.
Как должна работать:
Если в строке символ-разделитель - переносим его в буффер. Если нет, то сравниваем лексему: если лексема та, которую нужно заменить, то переносим в буффер заданное слово, иначе переносим лексему.
void replace(char str[], char a[], char b[], char buffer1[],char buffer2[], char sep[]) //(в том же порядке):строка, слово на поиск, слово на замену, буфер, массив разделителей
{
int i, sep_pos = 0, str_pos = 0, buff_pos = 0;
int sep_found = 0;
int word_start = 1;
char *token;
memset(buffer1, 0, sizeof(buffer1));
memset(buffer2, 0, sizeof(buffer2));
strcpy(buffer2, str);
token = strtok(buffer2, sep);
while(token != NULL)
{
for(str_pos=0; str[str_pos]; )
{
sep_found=0;
for(sep_pos=0; sep[sep_pos]; sep_pos++)
if (str[str_pos]==sep[sep_pos])
{
buffer1[buff_pos++] = str[str_pos++];
sep_found=1;
break;
}
if(!sep_found)
{
if(strcmp(token,a) == 0) // <--------------- !!!
{
strcat(buffer1,b);
buff_pos += strlen(b);
str_pos += strlen(token);
break;
}
if(strcmp(token,a) != 0)
{
strcat(buffer1,token);
buff_pos += strlen(token);
str_pos += strlen(token);
break;
}
token = strtok(NULL,sep);
}
}
}
str = (char*)realloc(str, strlen(buffer1)*sizeof(char)); //избавились от переполнения (на всякий)
strcpy(str,buffer1);
}
Пошаговое выполнение говорит, что ошибка начинается в (помечено комментарием)
Пример работы:
Массив разделителей: 123
Строка: а1ааа1а
Слово на поиск: а
Слово на замену: c
Результат: с1ааа1с
Пожалуйста, сильно не ругайтесь, программирую чуть больше месяца. С ошибкой совсем не могу разобраться.