• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Отзеркаливание строки - 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") пропадает символ, который был первым в исходной строке...
Ниччего не понимаю!...
 
на сколько я понимаю надо было массив символов const char * просто зеркально отразить и преобразовать в обратно в AnsiString
если так то алгоритм такой
преобразовать в const char *
сделать 2 указателя char на первый и последний элементы
проверить есть ли остаток от деления четное или нет кол-во символов
запустить в цикле до abs(strlength/2) менять местами содержимое указателей и делать сдвиг
Edit1->text=const char*;
всё
 
Ну а я что делаю?
И... а зачем на чётность-то проверять?
Просто ставишь указатели по концам и меняешь символы пока один указатель меньше другого - всё.
Проблема-то не в этом, а в том что при обратном преобразовании в AnsiString начинаются непонятки...

Более того, без конвертации AnsiString - char и обратно - всё работает...
 
Для: 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. Хелпа Билдера под рукой нет, так что могу ошибится
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab