Текущий архив: 2010.08.27;
Скачать: CL | DM;
ВнизТранслитерация Киррилица->Латинница - что делаю не так? Найти похожие ветки
← →
Дмитрий. М (2010-04-15 09:28) [0]
const
cyr: array[1..33] of Char = ("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и",
"й", "к",
"л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ",
"ь", "ы", "ъ", "э", "ю", "я");
lat: array[1..33] of string = ("a", "b", "v", "g", "d", "e", "jo", "zh", "z",
"i", "jj", "k",
"l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "c", "ch", "sh",
"shh", #34, "y", #39, "eh", "yu", "ya");
function TransliteKyrToLat(const Str: Ansistring): Ansistring;
var
i, j: Integer;
begin
result := "";
for i := Length(Str) downto 1 do
for j := 1 to 33 do
begin
if Str[i] = cyr[j] then
Str := copy(Str, 1, i - 1) + lat[j] + copy(Str, i + 1,
Length(Str) - i) // 1) ошибка
else if Str[i] = AnsiUpperCase(cyr[j]) then
Str := copy(Str, 1, i - 1) + AnsiUpperCase(lat[j]) + copy(Str, i +
1, Length(Str) - i); // 2) ошибка
end;
result := Str;
end;
Решил перевести процедуру в функцию, и столкнулся с проблемой:
1) E2064 Left side cannot be assigned to
2) E2064 Left side cannot be assigned to
← →
MBo © (2010-04-15 09:35) [1]хочешь модифицировать аргумент const Str ?
← →
И. Павел © (2010-04-15 09:37) [2]const Str: Ansistring
Str := copy(Str, 1, i - 1)
Так константа же.
← →
Palladin © (2010-04-15 09:39) [3]0. Ты модификатор const сознательно поставил в параметрах?
1. Не называй переменные str, есть одноименная compiler magic функция
2. Ну к чему столько плохо понимаемого бреда? Будь прощеconst
cyr: String[33] = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
lat: array[1..33] of string = ("a", "b", "v", "g", "d", "e", "jo", "zh", "z",
"i", "jj", "k",
"l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "c", "ch", "sh",
"shh", #34, "y", #39, "eh", "yu", "ya");
function TransliteKyrToLat(const S: Ansistring): Ansistring;
var
i, n: Integer;
begin
result := "";
for i := 1 to Length(s) do
begin
n := Pos(s[i], cyr);
if n = 0 then
Result := Result + s[i]
else
Result := Result + lat[n];
end;
end;
← →
Дмитрий. М (2010-04-15 09:49) [4]
> 0. Ты модификатор const сознательно поставил в параметрах?
> 1. Не называй переменные str, есть одноименная compiler
> magic функция
> 2. Ну к чему столько плохо понимаемого бреда? Будь проще
Приму к сведению, спасибо за помощь!
← →
Дмитрий. М (2010-04-15 13:27) [5]
> Result := Result + s[i]
> else
> Result := Result + lat[n];
Не обрабатывает Верхний регистр:
Входная стока: Проверка
Выходная: Пroverka
Где AnsiUpperCase забубенить?
← →
Dennis I. Komarov © (2010-04-15 13:43) [6]
> Где AnsiUpperCase забубенить?
А ты программист или где?
← →
Дмитрий. М (2010-04-15 13:53) [7]
> А ты программист или где?
Сама ветвь говорит о многом!
← →
Дмитрий. М (2010-04-15 13:55) [8]Сделал по ГОСТу
function TransliteKyrToLat(const Str: string): string;
const
RArrayL = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
RArrayU = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
colChar = 33;
arr: array[1..2, 1..ColChar] of string =
(("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y",
"k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f",
"kh", "ts", "ch", "sh", "shch", """", "y", """", "e", "yu", "ya"),
("A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y",
"K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F",
"Kh", "Ts", "Ch", "Sh", "Shch", """", "Y", """", "E", "Yu", "Ya"));
var
i: Integer;
LenS: Integer;
p: integer;
d: byte;
begin
result := "";
LenS := length(str);
for i := 1 to lenS do
begin
d := 1;
p := pos(str[i], RArrayL);
if p = 0 then
begin
p := pos(str[i], RArrayU);
d := 2
end;
if p <> 0 then
result := result + arr[d, p]
else
result := result + str[i];
end;
end;
Всем спасибо!
← →
Дмитрий. М (2010-04-15 13:58) [9]
> 1. Не называй переменные str, есть одноименная compiler
> magic функция
И выполнил соответственно Совета 1):
function TransliteKyrToLat(const S: string): string;
const
RArrayL = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
RArrayU = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
colChar = 33;
arr: array[1..2, 1..ColChar] of string =
(("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y",
"k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f",
"kh", "ts", "ch", "sh", "shch", """", "y", """", "e", "yu", "ya"),
("A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y",
"K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F",
"Kh", "Ts", "Ch", "Sh", "Shch", """", "Y", """", "E", "Yu", "Ya"));
var
i: Integer;
LenS: Integer;
p: integer;
d: byte;
begin
result := "";
LenS := length(s);
for i := 1 to lenS do
begin
d := 1;
p := pos(s[i], RArrayL);
if p = 0 then
begin
p := pos(s[i], RArrayU);
d := 2
end;
if p <> 0 then
result := result + arr[d, p]
else
result := result + s[i];
end;
end;
← →
Anatoly Podgoretsky © (2010-04-15 15:25) [10]> Дмитрий. М (15.04.2010 13:27:05) [5]
Нигде, надо просто расширить таблицу преобразования до 66 символов.
← →
Anatoly Podgoretsky © (2010-04-15 15:27) [11]> Дмитрий. М (15.04.2010 13:55:08) [8]
СРочно выбрось этот код, это же надо догадаться, использовать двумерные массивы для подобной задачи.
← →
Palladin © (2010-04-15 16:14) [12]
> Дмитрий. М (15.04.10 13:58) [9]
а объеденить маленькие и большие буквы в один массив тебе религия не позволила?function TransliteKyrToLat(const S: string): string;
const
RArray = "абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
colChar = 33;
arr: array[1..66] of string =
("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y",
"k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f",
"kh", "ts", "ch", "sh", "shch", """", "y", """", "e", "yu", "ya",
"A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y",
"K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F",
"Kh", "Ts", "Ch", "Sh", "Shch", """", "Y", """", "E", "Yu", "Ya");
var
i, n: Integer;
begin
result := "";
for i := 1 to Length(s) do
begin
n := Pos(s[i], cyr);
if n = 0 then
Result := Result + s[i]
else
Result := Result + lat[n];
end;
end;
говорю тебе, будь проще
← →
Игорь Шевченко © (2010-04-15 19:27) [13]Palladin © (15.04.10 16:14) [12]
И ну и как будет выглядеть слово ЩУЧИЙ ?
← →
Leonid Troyanovsky © (2010-04-15 19:37) [14]
> Игорь Шевченко © (15.04.10 19:27) [13]
> И ну и как будет выглядеть слово ЩУЧИЙ ?
А чего, нормально смотрится :)
У нас и не такие слова бывают, помню, как-то, обсуждали
русские слова с 6 согласными подряд.
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.059 c