C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Класс AnsiString
** sim
Отправлено: 24.11.2003, 21:54


Не зарегистрирован







AnsiString b,a="123456789";
b=a[2]+a[3]+a[4];

Почему при выполнении b не равно "234", а равно чему-то другому?
Георгий
Отправлено: 24.11.2003, 22:56


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а так:
CODE
AnsiString b,a="123456789";
b=AnsiString(a[2])+AnsiString(a[3])+AnsiString(a[4]);


QUOTE
Почему при выполнении b не равно "234", а равно чему-то другому?

a[2] — берётся символ из строки a
a[2]+a[3] — складывается коды символов из строки a
b=a[2]+a[3]+a[4]; — сумма кодов символов (число) преобразуется в строку
На вопрос "почему" я ответил?
** sim
Отправлено: 24.11.2003, 23:30


Не зарегистрирован







Спасибо. Я понял.
приведение к типу и в скобках указываем что приводим.
Георгий
Отправлено: 25.11.2003, 00:23


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



не совсем — приведение к типу это так:
CODE
(<тип>)переменная

а здесь я использовал явный вызов конструктора:
CODE
<тип>(переменная)

с созданием временного экземпляра класса.
SmAlex
  Отправлено: 01.12.2005, 17:27


Станционный диспетчер

Группа: Участник
Сообщений: 91



А вот у меня почему то следующий код


int KolStrok, NN, Povt;
AnsiString S1,S2;
// ---------------------

KolStrok=RichEdit1->Lines->Count;
for (NN=1; NN {
S1=RichEdit1->Lines->Strings[NN-1];
S2=Label1->Caption;
if (AnsiString(S1[0])==AnsiStringS2[0])) Povt=2;

при компиляции говорит, что в последнем операторе синтаксическая ошибка...

если вместо него ставлю

if (S1[0])==S2[0])) Povt=2;

то же самое.... Нельзя сравнивать?
SmAlex
Отправлено: 01.12.2005, 17:30


Станционный диспетчер

Группа: Участник
Сообщений: 91



То есть

if (S1[0]==S2[0]) Povt=2;
Guest
Отправлено: 01.12.2005, 17:50


Не зарегистрирован







У AnsiString индекс ведет счет от 1
SmAlex
Отправлено: 01.12.2005, 17:56


Станционный диспетчер

Группа: Участник
Сообщений: 91



Понял, спасибо!
SmAlex
Отправлено: 02.12.2005, 00:06


Станционный диспетчер

Группа: Участник
Сообщений: 91



А вот так — при компиляции не выдаёт ошибку , а при выполнении = ругается...
CODE

int KolStrok, NN, Povt;
AnsiString S1,S2;
// ---------------------

KolStrok=RichEdit1->Lines->Count;
for (NN=1; NN <KolStrok; N++)

    {
       S1=RichEdit1->Lines->Strings[NN-1];
       S2=Label1->Caption;
       if (AnsiString(S1[1])==AnsiStringS2([1])) Povt=2;
     }


Отредактировано Георгий — 02/12/2005, 03:07
Grigoriy
Отправлено: 02.12.2005, 07:06


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (SmAlex @ 02/12/2005, 00:06)
А вот так — при компиляции не выдаёт ошибку , а при выполнении = ругается...
CODE

int KolStrok, NN, Povt;
AnsiString S1,S2;
// ---------------------

KolStrok=RichEdit1->Lines->Count;
for (NN=1; NN <KolStrok; N++)

{
S1=RichEdit1->Lines->Strings[NN-1];
S2=Label1->Caption;
if (AnsiString(S1[1])==AnsiStringS2([1])) Povt=2;
}

Может Label1->Caption не содержит символов.
SmAlex
  Отправлено: 02.12.2005, 08:50


Станционный диспетчер

Группа: Участник
Сообщений: 91



Точно содержит... sad.gif
gvg
Отправлено: 02.12.2005, 09:08


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE (Grigoriy @ 02/12/2005, 07:06)
QUOTE

([1])


Что это за конструкция?
AVC
Отправлено: 02.12.2005, 09:28


Ветеран

Группа: Модератор
Сообщений: 1583



Какую ошибку?
И зачем обратное преобразование сиволов в строку
if (AnsiString(S1[1])==AnsiStringS2([1]))
?
SmAlex
Отправлено: 02.12.2005, 10:09


Станционный диспетчер

Группа: Участник
Сообщений: 91



Разобрался... Спасибо за помощь!!

Вернуться в Вопросы программирования в C++Builder