Консультация № 189560
07.06.2016, 20:49
0.00 руб.
08.06.2016, 10:54
0 5 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Удалить повторяющиеся символы в строке? стоящие рядом.

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

char* change(char *str)
{
char* p1, *p2;
for (p1 = p2 = str; *p1; *p1 = *p2)
{
if (*p2 != *(p2 + 1))
++p1;
++p2;
}
return str;
}

int main()
{
char str[] = "abbccc 1223";
puts(change(str));
system("pause");
return 0;
}


можете рассказать, че тут вообще происходит?

Обсуждение

давно
Академик
20764
1861
07.06.2016, 21:27
общий
Если добавить после цикла *p1 = 0, то будет происходить в точности то, что требуется.
давно
Посетитель
399158
228
07.06.2016, 21:28
общий
ну а вы можете объяснить, что там вообще написано? я просто не очень понимаю...
давно
Посетитель
7438
7205
08.06.2016, 11:47
общий
это ответ
Здравствуйте, Посетитель - 399158!
Код:

char* change(char *str)
{
char* p1; //указатель на очередной отличный от следующего символ
char* p2; //указатель на очередной символ в строке
//вначале указатели указывают на начало строки
//циклим, пока не сформируем всю строку, не встретим последний 0
//в конце каждого шага копируем нужный отличающийся символ на новое (возможно, старое) место
for (p1 = p2 = str; *p1; *p1 = *p2)
{
if (*p2 != *(p2 + 1)) //если текущий символ отличается от следующего
++p1; //то сдвигаем указатель отличающихся символов на 1
//для равных указатель останется без изменения
// тем самым, одинаковые удалятся из строки
++p2; //сдвигаем указатель очередных символов на 1
//по команде *p1 = *p2 символ по адресу p2 запишется по адресу p1
}
return str; //вернем адрес строки
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
08.06.2016, 11:48
общий
Адресаты:
Цитата: Хватов Сергей
Если добавить после цикла *p1 = 0, то будет происходить в точности то, что требуется.
Нет надобности. 0 копируется автоматически...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
08.06.2016, 11:49
общий
Спасибо
Форма ответа