• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Отзеркаливание строки - Ansistring - трабл!

  • Автор темы Trikster
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Trikster

Нид хэлп!

Надо зеркально перевернуть строку символов (как для палиндрома)

Вот код:

char *a, *b, *c, d;

a=Edit3->Text.c_str();
for(b=c=a;*(c+1)!=NULL;c++);
while(b<c)
{
d=*b;
*b++=*c;
*c--=d;
}
Edit3->Text=AnsiString(a);

Со строками типа char всё работает без вопросов.
А вот при преобразовании обратно в AnsiString в случае, если в строке нечётное количество символов (не считая концевого "\0") пропадает символ, который был первым в исходной строке...
Ниччего не понимаю!...
 
B

Blackheart1983

на сколько я понимаю надо было массив символов const char * просто зеркально отразить и преобразовать в обратно в AnsiString
если так то алгоритм такой
преобразовать в const char *
сделать 2 указателя char на первый и последний элементы
проверить есть ли остаток от деления четное или нет кол-во символов
запустить в цикле до abs(strlength/2) менять местами содержимое указателей и делать сдвиг
Edit1->text=const char*;
всё
 
T

Trikster

Ну а я что делаю?
И... а зачем на чётность-то проверять?
Просто ставишь указатели по концам и меняешь символы пока один указатель меньше другого - всё.
Проблема-то не в этом, а в том что при обратном преобразовании в AnsiString начинаются непонятки...

Более того, без конвертации AnsiString - char и обратно - всё работает...
 
E

European

Для: Blackheart1983
Может сначала разобрался бы в проблеме?

Для: Trikster
Насколько я помню, свойство Text возвращает временный объект, поэтому никто не гарантирует сохранности данных.
Попробуй вот такой вариант:
char *a, *b, *c, d;

Код:
AnsiString SomeText = Edit3->Text;
a=SomeText.c_str();
for(b=c=a;*(c+1)!=NULL;c++);
while(b<c)
{
d=*b;
*b++=*c;
*c--=d;
}
Edit3->Text=AnsiString(a);

P.S. Хелпа Билдера под рукой нет, так что могу ошибится
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!