Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Работа со строкой


Автор: Mick Winder 18.2.2005, 18:43
Доброго вечера, народ! smile
Предлагаю для решения две задачки.
1. Дана строка из неизвестного количества символов. smile Как из этой строки заполучить последний символ?
2. Дана строка из неизвестного количества символов. Известно, что строка состоит из чисел и маленьких букв латинского алфавита. Вопрос. smile Как заполучить строку, состоящей только из чисел?

Автор: Fedor 18.2.2005, 20:10
Цитата(Mick @ 18.2.2005, 17:43)
Дана строка

что такое строка? Последовательность символов, заканчивающаяся переводом каретки? Тогда в первой задаче идешь в цикле по строке пока не достигнешь символа #13
Во второй задаче так само идешь по строке до конца и выбираешь символы-числа, созраняешь их например в другую строку

Автор: Cheba 18.2.2005, 23:21
Последний символ строки:
Код
str[length(str)]


Взять из строки только цифры:
Код
function numStr(str: String): String;
var
 i: Integer;
 d: String;
begin
 d := '';
 for i := 1 to length(str) do
  if (str[i] >= '0') and (str[i] <= '9') then
    d := d + str[i];
 numStr := d;
end;


Задачи действительно простые. Взялся написать только что-бы язык не забыть. smile
Подумав, и новичок сможет решить их.

Автор: Fedor 19.2.2005, 07:57
Cheba
Цитата(Mick @ 18.2.2005, 17:43)
Дана строка из неизвестного количества символов


Цитата(Cheba @ 18.2.2005, 22:21)
str[length(str)]


насколько я понял, длину строки невозможно узнать таким образом. Вот представь, что ты считываешь файл и то, что ты считываешь нельзя запихнуть в стринг.

В общем, ждем разъяснения Mick Winder

Автор: Pakshin A. S. 20.2.2005, 11:04
Код

var
c,c0:char;
begin
read(c);
while not eoln do {или c <> eoln, не помню точно}
  begin
    c0:=c;
    read(c);
  end;
writeln;
writeln(c0);
end.

Код

var
c:char;
begin
read(c);
while c <> eoln do
  begin
   if c in ['1'..'0'] {не помню точно таблицу кодов}
    then
     write(c);
   read(c);
  end;
end.

Автор: Cheba 20.2.2005, 13:01
Pakshin A. S.
В первом примере стоит показывать не с0, а с. Иначе покажет предпоследний символ.

Во втором примере две ошибки.
eoln - возвращает boolean.
И в ASCII цифры идут от 0 до 9.

Таким образом получится такое:
Код
var
c:char;
begin
read(c);
while not eoln do
  begin
   if c in ['0'..'9'] { а я помню;) }
    then
     write(c);
   read(c);
  end;
end.


Автор: Mick Winder 21.2.2005, 11:31
Молодцы, ребятки! smile
А теперь то, что я имел в виду... smile

Код

var
S, B: String;
i: Integer;
begin
S:= 's23abc'; // для примера
// Последний символ строки
B:= Copy(S, length(S), 1);

// Полученная строка, состоящая только из чисел
B:='';
for i:=1 to length(S) do begin
if S[i] in ['0'..'9'] then
B:= B + S[i];
end;


smile
Добавлено @ 11:35
Цитата(Cheba @ 18.2.2005, 23:21)
Последний символ строки:
Код
str[length(str)]



Это тоже правильно. Просто замечательно!!!

Автор: Cheba 21.2.2005, 15:52
Я так понял, что я написал именно так, как ты хотел?

Автор: Mick Winder 21.2.2005, 15:54
Цитата(Cheba @ 21.2.2005, 15:52)
Я так понял, что я написал именно так, как ты хотел?

Да!

Автор: Cheba 21.2.2005, 16:20
А где благодарность? smile

Автор: Mick Winder 24.2.2005, 11:07
Цитата(Cheba @ 21.2.2005, 16:20)
А где благодарность? smile

Премного благодарен, сударь! smile
Жму крепко твою руку! smile

Автор: Cheba 24.2.2005, 22:43
Всегда к вашим услугам. smile

А теперь, наверное, хватит офтопить.

Автор: Guest 14.4.2005, 18:46
Знаю что задача не космическая но чет дойти не могу пАмагите ПЛИЗ"!!

Дана произвольная строка, состоящая из букв латинского алфавита. Удалить все согласные буквы
и подсчитать кол-во произведенных удалений....

Препод достал....

Автор: Guest 14.4.2005, 18:48
Или вот: Дана произвольная строка. Из каждой группы идущих подряд букв удалить все буквы расположенные на нечетных позициях...

Автор: Fedor 14.4.2005, 19:11
Guest
Во-первых зарегестрируйся
Во-вторых прочитай правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27
В-третьих выкладывай код с пояснением что именно не получается. За тебя задачи решать тут мало кто захочет!

Автор: Негодяй 14.4.2005, 19:47
Цитата(Guest @ 14.4.2005, 18:48)
Или вот:  Дана произвольная строка. Из каждой группы идущих подряд букв удалить все буквы расположенные на нечетных позициях...

держи!

Код

var s:string;
i:integer;
begin
read(s);

i:=1;
repeat
delete(s,i,1);
inc(i);
until i>=length(s);
write(s);
end;

Автор: Hidrag 14.4.2005, 20:11
Негодяй
smile ну ну, помог челу smile

Автор: Негодяй 14.4.2005, 20:24
Цитата(Hidrag @ 14.4.2005, 20:11)
Негодяй
smile ну ну, помог челу smile

мне второй день занятся нечем smile

Цитата
группы идущих подряд букв


Код

var s:string;
i:integer;
begin
s:='abc de  fgh';

i:=1;
repeat
delete(s,i,1);
if s[i]=' ' then
continue;
inc(i);
until i>=length(s);
write(s);
end;

Автор: Guest 15.4.2005, 08:08
ну спасибо тебе чувак....знал я что тут занятся кому-нибудь нечем...


И еще интересует вопрос....как мне вбить согласные буквы в массив...или че там с ними делать....и потом если они будут встречатся в строке удалить их нафиг???

Автор: Негодяй 15.4.2005, 12:59
Цитата(Guest @ 15.4.2005, 08:08)
ну спасибо тебе чувак....знал я что тут занятся кому-нибудь нечем...


ну развеселил smile smile smile

Цитата
И еще интересует вопрос....как мне вбить согласные буквы в массив...или че там с ними делать....и потом если они будут встречатся в строке удалить их нафиг???


Цитата
Дана произвольная строка, состоящая из букв латинского алфавита. Удалить все согласные буквы
и подсчитать кол-во произведенных удалений....


с этой задачей тоже проблем нет, делай так: делаешь множество из согласных букв из латинского алфавита, и по-символьно сравиваешь введённую строку с элементами множества, после чего удаляешь символ и наращиваешь счётчик таких удалений. Вообщем из этого следует почитай литературу про множества поучись с ним работать - вот и всё твой решение.
Чего не понятно будет спрашивай? smile

PS да и зарегистрируейся или хотя бы назовись как-нибудь, Guest smile

Автор: Негодяй 15.4.2005, 13:50
http://forum.vingrad.ru/index.php?act=ST&f=84&t=48802&st=0 - решение

Автор: BeNDeR 15.4.2005, 17:26
все чуваки спасибо...выручили...терь буду на вашем рулезном форуме тусить ума набиратся...!!!

Автор: Алина 14.5.2005, 15:48
Удаляем из строки все согласные, решение по-тупому:

Код
String s,g;
....

read(s);
for i:=1 to len(s) do
  begin
    if s[i] not in['b','B','c', 'C',.....{тут последовательно прописать все-все согласные буквы}]
      then g=g+s[i];
end;
Writeln(g);

Len(s)-Len(g) - это количество удалений

Автор: Mager2005 14.5.2005, 17:59
Предлагаю, что б не прописывать и строчные и прописные буквы сделать следующее:

Код

b:char;
========
for i:=1 to length(s) do
begin
b:=upcase(s[i]);
if b not in ['B','C', .......'Z'] then g:=g+s[i];
end;
=========


a можно еще проще:
Код

===========
b:=upcase(s[i]);
if b in ['A','E','I','O','U'] then g:=g+s[i];
===========

У нас ведь строка состоит только из латинских букв smile

Автор: Fantasist 20.5.2005, 20:13
Цитата(Mager2005 @ 14.5.2005, 14:59)
a можно еще проще:


А еще проще:

Код

if UpCase(s[i]) in ['A','E','I','O','U'] then g:=g+s[i];



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)