|
Вопрос # 6 639/ вопрос решён / |
|
Здравствуйте!
Заклинило меня.
Не могу понять, почему строка
if Bykva in b[bi] then
все время False((
Забиваю ему первую букву из множества b[1], все равно False
Помогите распутаться)
фрагмент кода в приложении
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- type TBykvySet = set of Char;
- var
- b: array [1..9] of TBykvySet;
- BukvyPodpisi: string;
- Total, Sum: Integer;
- i, bi: Integer;
- Bykva: Char;
- begin
-
-
-
-
-
-
-
-
-
-
-
- BukvyPodpisi := AnsiUpperCase(Edit4.Text);
-
- Total := 0;
- for I := 1 to Length(BukvyPodpisi) do
- begin
- Bykva := BukvyPodpisi[i];
- for bi := 1 to 9 do
- begin
-
- begin
- Total := Total + bi;
- Break;
- end;
- end;
- end;
- Sum := (Total div 10) + (Total mod 10);
-
- Memo1.Lines.Clear;
- Memo1.Lines.Add(IntToStr(Sum));
- end;
|
Вопрос задал: Aндрей (статус: 1-ый класс)
Вопрос отправлен: 16 ноября 2016, 09:39
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: dmistand
Здравствуйте, Aндрей!
Проблема в несоответсвии типов WideChar и AnsiChar. Для наборов делфи использует AnsiChar, в строках же символы - WideChar.
Для английского алфавита проблем не возникает, для русского же - они появляются. Точно не скажу, но думаю, из-за неверной автоконвертации переменной Инлмф - там получится уже не 'A'.
Если объявления изменить на такие:
type TBykvySet = set of AnsiChar;
var
b: array [1..9] of TBykvySet;
BukvyPodpisi: AnsiString;
Bykva: AnsiChar;
то всё работает.
И ещё рекомендую использовать для символов CharInSet(Bykva, b[bi]) из SysUtils вместо Bykva in b[bi].
|
Ответ отправил: dmistand (статус: 1-ый класс)
Время отправки: 16 ноября 2016, 10:34
Оценка за ответ: 5
Комментарий к оценке: Спасибо. заработало
|
Мини-форум вопроса
Всего сообщений: 0.
16 ноября 2016, 10:57: Статус вопроса изменён на решённый (изменил автор вопроса — Aндрей)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|