Удалить все пробелы в строке

Декабрь 10th, 2012 § 0 comments § Прямая ссылка

Нашел один очень изящный способ решения данной задачи, делюсь.


void removeSpace(char *str) {
char *p1 = str, *p2 = str;
do
while (*p2 == ' ')
p2++;
while (*p1++ = *p2++);
}

Удалить из сторки все лишние пробелы

Декабрь 10th, 2012 § 0 comments § Прямая ссылка

Решил начать цикл постов, про алгоритмы и задачам, которые могут попасться на собеседовании. При желании все можно найти на просторах сети, но классно когда все лежит в одном месте. Так вот первая задачка, мне ее кстати задавали при поступлении в СПбАУ РАН на кафедру “математических и информационных технологий” к слову так и не поступил увы. Условие задачи.

Дана строка, удалить все лишние пробелы, под лишними будем иметь ввиду все пробелы в начале и в конце строки и более одного пробела внутри строки. Использовать еще одну строку запрещено. Ниже мое решение.


#include <stdio.h>
#include <string.h>
int main()
{
char* str = new char[128];
int len = sprintf(str,"  Some huge     string with                a lot multiple white spaces!!!   ");
if(len == 0)
return -1;

printf("%s\r\n",str);
bool isStart = true;

char* ptr = str;
int i = 0;
char previos = 'x'; //переменные надо инициализировать, а иначе может быть очень плохо )))
char* endPtr = &str[len - 1];
while(ptr != endPtr)
{
if(*endPtr == ' ')
{
endPtr--;
continue;
}

if(*ptr == ' ' && isStart)
{
*ptr++;
continue;
}

if(*ptr !=' ')
{
isStart = false;
}
if(previos == ' ' && *ptr == ' ')
{
*ptr++;
continue;
}

previos = *ptr;
str[i++] = *ptr++;
}

str[i++] = *endPtr; //тут записываем последний символ
str[i]='\0';
printf("%s\r\n",str);
getchar();
return 0;
}

Не забывайте, что sprintf deprecated здесь используется только для демонстрации примера. Если вы обнаружили не точность в примере, лучший способ решения или, что еще хуже ошибку, отпишите в коменты, что бы распространять знание, а не на оборот.

Смотреть фильмы онлайн