Ошибка в функции удаления пробелов в строке: удаляет больше чем нужно
Вот функция удаления пробелов в строке:
char *not_space(char *string){
char buf[16000];
char *str = NULL;
int index_buf = 0;
int mem_string = 0;
for (int i = 0; i < my_len(string); i++){
if (string[i] != ' '){
for( int j = i; string[j] != ' '; j++ ){
buf[index_buf] = string[j];
index_buf++;
mem_string++;
i++;
}
buf[i] = '1';
mem_string++;
}
if (i == my_len(string) -1 && buf[0] != ' ') {
buf[index_buf] = '\0';
mem_string--;
}
}
buf[index_buf++] = '\0';
str = calloc(mem_string, sizeof(char));
my_strcopy(str, buf);
return str;
}
Но функция не работает: она вообще удаляет все пробелы в строке, а если добавить printf во 2й цикл for тогда цикл движется 314 раз, и индексы изменяются до 314. Хотя во вводимой строке всего 11 символов (строка: got got got).
Ответы (1 шт):
Автор решения: avp
→ Ссылка
Если надо удалить все пробелы в начале и конце строки и оставить по одному между словами, вернув новую строку в динамической памяти, то можно написать какой-то такой код:
char *
not_space (char *string)
{
char *res = malloc(strlen(string) + 1); if (!res) return 0;
size_t n = 0, n_spc = 0;
for (size_t i = 0; string[i]; i++)
if (string[i] != ' ')
res[n++] = string[i], n_spc = 0;
else if (!n_spc++)
res[n++] = string[i];
if (n && res[n - 1] == ' ')
n--;
res[n] = 0;
return realloc(res, n + 1);
}