Помощь - Поиск - Пользователи - Календарь
Полная версия: строка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
chel09
какая функция используется для нахождения буквы в последнем слове строки?
Ozzя
Сначала нужно разбить строку на слова
Разбиение на слова. Все способы.
chel09
разбил

function GetWords(s: string; var L: TWordList; delimiters: TDelimiter): Byte;
var i, p: Byte;
begin
for i := 1 to Length(s) do
if s[i] In delimiters then s[i] := #32;

далее что?
Lapp
Я думаю, что речь идет о функции Pos . Хотя вопрос поставлен так, что может быть, что угодно..
chel09
Цитата(Lapp @ 6.01.2010 12:54) *

Я думаю, что речь идет о функции Pos . Хотя вопрос поставлен так, что может быть, что угодно..


задача вообще такова
Дана строка символов. Найти в данной строке последнее слово, начинающееся с
латинской буквы ‘a’.
andriano
Цитата(chel09 @ 6.01.2010 13:07) *

задача вообще такова
Дана строка символов. Найти в данной строке последнее слово, начинающееся с
латинской буквы ‘a’.

Вариант 1: бежать по строке из начала в конец и запоминать последнее вхождение двухсимвольной последовательности ' a'.
Вариант 2: бежать по строке из конца в начало до того, как встретим первое вхождение ' a'.
Примечание: если результат не найден, проверить, не начинается ли первое слово с 'a', если да - оно и есть искомое.
Примечание 2: можно сначала добавить в начало пробел и не делать в конце никаких проверок.
Т.е. уже, как минимум, 4 варианта решения - даже не разбивая строку на отдельные слова.
chel09
Цитата(andriano @ 6.01.2010 13:20) *

Вариант 1: бежать по строке из начала в конец и запоминать последнее вхождение двухсимвольной последовательности ' a'.
Вариант 2: бежать по строке из конца в начало до того, как встретим первое вхождение ' a'.
Примечание: если результат не найден, проверить, не начинается ли первое слово с 'a', если да - оно и есть искомое.


блин если бы я тебя ещё понел а так я вообще в этом несоображаю ты лучше бы пример привел
andriano
Цитата(chel09 @ 6.01.2010 13:23) *

блин если бы я тебя ещё понел а так я вообще в этом несоображаю ты лучше бы пример привел

Нет, давай с другой стороны.
Представь, что перед тобой лежит листок бумаги с записанной строкой и тебе надо решить задачу, условие которой ты привел.
Попытайся подробно описать последовательность собсвенных действий для решения задачи.
volvo
Цитата
Вариант 1: бежать по строке из начала в конец и запоминать последнее вхождение двухсимвольной последовательности ' a'.
Вариант 2: бежать по строке из конца в начало до того, как встретим первое вхождение ' a'.
Это все сработает только при условии, что слова разделяются пробелами и ничем больше, никаких знаков препинания. Если со знаками препинания (пример - 'xor,or,and,not operators') - то в этот алгоритм придется добавить еще один пункт...

chel09
Цитата(andriano @ 6.01.2010 14:14) *

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


короче я сделал то что посоветовали ранее разбил строку на слова
А как букву найти незнаю
andriano
Цитата(volvo @ 6.01.2010 14:16) *

Это все сработает только при условии, что слова разделяются пробелами и ничем больше, никаких знаков препинания. Если со знаками препинания (пример - 'xor,or,and,not operators') - то в этот алгоритм придется добавить еще один пункт...
Это было бы существенно, если бы речь шла о чем-то в конце слова.
В правильно записанном предложении после каждого разделителя следует пробел (номер ГОСТа не помню, но при желании можно посмотреть). Поэтому перед началом слова (кроме первого) всегда присутствует пробел.


Добавлено через 4 мин.
Цитата(chel09 @ 6.01.2010 14:44) *

короче я сделал то что посоветовали ранее разбил строку на слова
А как букву найти незнаю

"не" и "знаю" пишется раздельно. Аккуратность нужна, каким бы языком: русским или Паскалем, ты ни выражал свои мысли.

Ладно. Первый этап задачи - разбить строку на отдельные слова, у тебя сделан. Теперь перед тобой лист бумаги, на котором в столбик записаны слова. Нужно решить задачу (самому, без компьютера). Опиши подробно, как ты будешь это делать?
volvo
Цитата
В правильно записанном предложении после каждого разделителя следует пробел (номер ГОСТа не помню, но при желании можно посмотреть). Поэтому перед началом слова (кроме первого) всегда присутствует пробел.
Плевать я хотел на "правильность по ГОСТу", я живу в другой стране, и пишу на ИНОСТРАННОМ языке, латиницей, между прочим. Это раз. А два - где-то в первом или последующих постах было сказано, что "дано предложение, соответствующее ГОСТу №..."? Не было. Не надо додумывать задачу, договорились? Как хочу, так и ввожу. Я - пользователь программы, и не надо мне ставить условия "Введи строку согласно ГОСТу". Задача программиста - сделать так, чтобы ЛЮБОЙ мой ввод был обработан корректно. Если что, я могу ввести и 255 символов, и обломаешься ты добавить первый пробел... Это так, на всякий случай.
andriano
Цитата(volvo @ 6.01.2010 16:22) *
Задача программиста - сделать так, чтобы ЛЮБОЙ мой ввод был обработан корректно.
Это задача невыполнима.
От программы можно лишь требовать, чтобы:
1. Любой корректный ввод был корректно обработан.
2. Любой некорректный ввод был обработан.
Во втором случае, естественно, возможно два варианта:
2а. При обработке некорректного ввода пользователю выдается сообщение о некорректности.
2б. Некорректный ввод обрабатывается "как получится".
Но гарантировать ВЕРНЫЙ ответ при НЕВЕРНЫХ исходных данных принципиально невозможно.
Lapp
Цитата(chel09 @ 6.01.2010 14:44) *
короче я сделал то что посоветовали ранее разбил строку на слова
А как букву найти незнаю
попробуй как-то так (без русских букв):
const
Letters: set of char=['A'..'Z']+['a'..'z'];
...
i:=Length(s);
w:='';
while (i>0)and(w='') do
if s[i]='a' then if (i=1)or not(s[i-1] in Letters) then
while (i<=Length(s))and(s[i] in Letters) do begin
w:=w+s[i];
Inc(i)
end
else Dec(i);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.