Страница 1 из 1
Процедура, обратная UpCase. Pascal
Добавлено: 15 фев 2007, 22:55
Колядин Максим
Здравствуйте, программисты! Я долго искал, но, как ни странно, не нашел в Borland Pascal процедуры обратной UpCase. Есть ли такая процедура вообще?
Мне нужно создать программу, чтобы
Код: Выделить всё
var s,s2: string;
begin
s:='QwERtY';
s2:='qwerty';
....
s и
s2 были равны. Не используя модуль strings. То есть, создать программу, где нет разницы между прописными и заглавными буквами.
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 07:45
Dr_Grizzly
Попробуй LowerCase
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 09:51
somewhere
" писал(а):То есть, создать программу, где нет разницы между прописными и заглавными буквами
В паскале действительно нет функции обратной UpCase. Если уж нужно сравнивать строки с разным регистром, то UpCase вполне подойдет. Ведь вовсе не обязательно сравнивать строки в нижнем регистре, можно и в верхнем. На крайняк можно и через Ord решить этот вопрос
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 14:14
Колядин Максим
Вот тут написал модуль, который решает эту проблему. Т.к разница между "А" и "а" по ASCII в 32, то подойдёт функция s2
:=chr(ord(s2)-32)
Код: Выделить всё
unit dstr;
interface
var i: integer;
procedure discase(s,s2: string);
implementation
procedure discase(s,s2: string);
begin
for i:= 1 to length(s) do if s[i]<>s2[i] then begin
s2[i]:=chr(ord(s2[i])-32);
if s[i]<>s2[i] then s2[i]:=chr(ord(s2[i])+64);
end;
end;
end.
Написал, но с его использованием возникла проблемка -модуль ничего не обрабатывает. Не знаю, что я не так сделал, но как был s2='qwerty', так и остался. Хотя должен быть равен
s(s='QwERtY').
Использую свой модуль так:
Код: Выделить всё
uses dstr,crt;
var
s,s2:string;
i: integer;
begin
clrscr;
readln(s);
readln(s2);
discase(s,s2);
if s=s2 then write('Строки равны.') else write('Строки не равны');
readkey;
end.
Может что-нибудь не так написал?
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 14:24
Absurd
Колядин Максим писал(а):То есть, создать программу, где нет разницы между прописными и заглавными буквами.
Так делать не надо. Всегда используй Case-Sensitive сравнение. Нучуствительность к регистру - дурное наследие ДОС'а.
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 16:07
Колядин Максим
Сообщение от Dr_Grizzly
Попробуй LowerCase
Спасибо! Работает! Только жаль что функцию сам придумал...
Сообщение от
сегда используй Case-Sensitive сравнение
Насколько я знаю, такой процедуры в Borland Pascal 7.0 нет. Но это не важно, меня сейчас интересует другой вопрос -
почему мой модуль не обрабатывает string'и(см. выше)? Я правильно его написал?
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 16:51
somewhere
" писал(а):procedure discase(s,s2: string);
В заголовке два параметра, которые можно менять, но они все равно потеряются, т.к. передаются по значению. Это значит, что при входе в процедуру параметры копируются на стек полностью. Меняя их значения они меняются лишь локально. Надо передавать их по ссылке, тогда они не копируются, на стек попадает лишь указатель на строку по которой код внутри процедуры и меняет значения самих переменных (т.е. уже не копию, а оригинал)
Код: Выделить всё
procedure discase(s:String; var s2: string);
Вообще почему-то все любят процедуры и никто не делает функции:
Re: Процедура, обратная UpCase. Pascal
Добавлено: 16 фев 2007, 23:45
Колядин Максим
Всё... модуль работает. Никогда бы не подумал что есть разница между (s,s2: string) и (s: string; var s2: string) (до тебя, естественно). Спасибо.