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

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

Trikster

#1
Нид хэлп!

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

Вот код:

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

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

Trikster

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

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