0 / 0 / 0 Регистрация: 21.08.2012 Сообщений: 8 |
|
1 |
|
Определить, есть ли в тексте заданное слово21.08.2012, 20:41. Показов 9624. Ответов 19
Не могу сделать без ошибок и все тут(
0 |
296 / 274 / 194 Регистрация: 03.05.2012 Сообщений: 570 |
|
21.08.2012, 20:49 |
2 |
Не могу сделать без ошибок и все тут( Покажи свой код с ошибкой,а мы подскажем как исправить.
1 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
21.08.2012, 21:28 |
4 |
Ev[G]eN, Думаю ссылка неудачная. Слова могут разделяться не только пробелами, слова могут переноситься, да и файл читать нужно. Кроме того не нужно проверять все слова, а только найти первое.
0 |
CodeR Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
||||
22.08.2012, 09:03 |
5 |
|||
Решение
Файл in.txt должен быть создан и заполнен в корне диска C:
1 |
Paster Fob 296 / 274 / 194 Регистрация: 03.05.2012 Сообщений: 570 |
||||
22.08.2012, 11:40 |
6 |
|||
РешениеМой вариант:
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
|
22.08.2012, 11:42 |
7 |
Paster Fob, а теперь создай файл текстовый, набери туда
0 |
Puporev Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
22.08.2012, 11:42 |
8 |
|||
Например сторока
0 |
Viktorya_rb |
||||
22.08.2012, 15:53 |
9 |
|||
Да, в предыдущей программе оно будет считаться за слово! Вот правильный код:
|
КонецСвета Почетный модератор 7966 / 3937 / 2464 Регистрация: 30.10.2011 Сообщений: 5,377 |
||||
22.08.2012, 16:32 |
10 |
|||
Решениекак вариант до кучи =)
1 |
0 / 0 / 0 Регистрация: 21.08.2012 Сообщений: 8 |
|
22.08.2012, 19:05 [ТС] |
11 |
Проект project1.exe вызвал класс исключения ‘RunError(2)’ В чем проблема? ps: мне нужно создать файл, а не привязать его… Голова пухнет уже..все переделать пыталась, ничего не выходит(
0 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.08.2012, 19:11 |
12 |
Проект project1.exe вызвал класс исключения ‘RunError(2)’ Если нужно в Делфи, то туда бы и писали, а здесь Паскаль.
0 |
CodeR Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
||||
22.08.2012, 20:59 |
13 |
|||
Решение
Проект project1.exe вызвал класс исключения ‘RunError(2)’ Сразу надо говорить…
0 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.08.2012, 21:01 |
14 |
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
|
22.08.2012, 21:11 |
15 |
Puporev, а Lazarus идентичен Delphi?мой код там от компилируется?
0 |
Puporev Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||||||
22.08.2012, 21:21 |
16 |
|||||||
РешениеArtem7, Я там не знаю есть ли консоль, а с формой точно как в Делфи. Добавлено через 2 минуты Добавлено через 5 минут
а то строку нужно вводить на краю… Добавлено через 43 секунды
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
|
22.08.2012, 21:27 |
17 |
Puporev, спасибо, да на счёт строки не заметил…
0 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.08.2012, 21:31 |
18 |
Не смотри что кода много, все что кроме твоего создано автоматом.
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,546 Записей в блоге: 1 |
|
22.08.2012, 21:32 |
19 |
Puporev, Не по теме: вот это да…вот тебе и Lazarus с консолью
0 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.08.2012, 21:36 |
20 |
Так он и с формой такой страшный, это же по сути Free Pascal с наворотами…
0 |
Раздел: Стандартные функции Паскаля
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Функция Pos в Паскале ищет подстроку в строке.
Синтаксис функции имеет довольно много вариантов для разных типов данных:
function Pos(const substr : shortstring; const s : shortstring) : SizeInt; function Pos(C : Char; const s : shortstring) : SizeInt; function Pos(const Substr : ShortString; const Source : AnsiString) : SizeInt; function pos(const substr : shortstring; c : Char) : SizeInt; function Pos(const Substr : AnsiString; const Source : AnsiString) : SizeInt; function Pos(c : Char; const s : AnsiString) : SizeInt; function Pos(const Substr : UnicodeString; const Source: UnicodeString) : SizeInt; function Pos(c : Char; const s : UnicodeString) : SizeInt; function Pos(c : UnicodeChar; const s : UnicodeString) : SizeInt; function Pos(c : AnsiString; const s : UnicodeString) : SizeInt; function Pos(c : UnicodeString; const s: AnsiString) : SizeInt; function Pos(c : ShortString; const s : UnicodeString) : SizeInt; function Pos(const Substr : WideString; const Source : WideString) : SizeInt; function Pos(c : Char; const s : WideString) : SizeInt; function Pos(c : WideChar; const s : WideString) : SizeInt; function Pos(c : WideChar; const s : AnsiString) : SizeInt; function Pos(c : AnsiString; const s : WideString) : SizeInt; function Pos(c : WideString; const s : AnsiString) : SizeInt; function Pos(c : ShortString; const s : WideString) : SizeInt; function Pos(c : Char; const v : Variant) : SizeInt; function Pos(s : ShortString; const v : Variant) : SizeInt; function Pos(a : AnsiString; const v : Variant) : SizeInt; function Pos(w : WideString; const v : Variant) : SizeInt; function Pos(w : UnicodeString; const v : Variant) : SizeInt; function Pos(v : Variant; const c: Char) : SizeInt; function Pos(v : Variant; const s : ShortString) : SizeInt; function Pos(v : Variant; const a : AnsiString) : SizeInt; function Pos(v : Variant; const w : WideString) : SizeInt; function Pos(v : Variant; const w : UnicodeString) : SizeInt; function Pos(v1 : Variant; const v2 : Variant) : SizeInt;
Вся эта куча вариантов взята из документации. Так что просьба не критиковать за излишние подробности )))
Функция Pos возвращает индекс подстроки Substr в строке S, если строка S содержит в себе подстроку Substr. Если подстрока Substr не найдена в строке, то функция возвращает 0. Поиск чувствителен к регистру.
Как найти подстроку в строке
Разумеется, сделать это можно без использования специальных функций.
Проще всего найти в строке символ — это можно сделать простым перебором символов в строке.
Найти вхождение подстроки из нескольких символов будет сложнее. Но тоже возможно — существуют специальные алгоритмы.
Однако зачем “изобретать велосипед”, если есть готовые функции. Такие, например, как функция Pos.
С помощью этой функции можно найти символ или подстроку в строке.
Как часто приходится это делать? Зависит от специфики вашей работы.
Если вы работаете, например, с математикой, то почти никогда.
Если же вы работаете с большими объёмами текстовой информации, с файлами, то довольно часто.
Итак, пример:
S := 'abcdefgcde'; Writeln(Pos('f', S)); //Pos = 6 Writeln(Pos('F', S)); //Pos = 0 - буква F не найдена Writeln(Pos('cde', S)); //Pos = 3, потому что функция //возвращает индекс первого //найденного вхождения Writeln(Pos('cdf', S)); //Pos = 0 - такой подстроки нет
В принципе, здесь всё понятно. Особых разъяснений не требуется.
Единственное замечание по варианту поиска подстроки cde. Как видите, в исходной строке есть две подстроки cde. Но функция возвращает число 3, то есть индекс первого элемента первой найденной подстроки.
Пример программы:
program posfunc; var S : string; begin //Ищем индекс первого пробела в строке S := 'The first space in this sentence is at position : '; Writeln(S, Pos(' ', S)); //Pos = 4 //Ищем последнюю букву английского алфавита в строке S := 'The last letter of the alphabet doesn''t appear in this sentence '; //Так как такой буквы в строке нет, то будет выведено сообщение об этом if (Pos('Z', S) = 0) and (Pos('z', S) = 0) then Writeln(S); //Проверяем, что функция Pos действительно чувствительна к регистру S := 'abcdefgcde'; Writeln(Pos('f', S)); //Pos = 6 Writeln(Pos('F', S)); //Pos = 0 - буква F не найдена Writeln(Pos('cde', S)); //Pos = 3, потому что функция //возвращает индекс первого //найденного вхождения Writeln(Pos('cdf', S)); //Pos = 0 - такой подстроки нет ReadLn; end.
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |
Как найти слова в строке?
, Нужно найти слова и их длину
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Из заданного предложения распечатать все слова, длина которых больше пяти символов! |
Eiden |
|
Несложно, но муторно Program zadacha; Const Syms = [‘;’,’.’,’,’,’ ‘,’:’,’-‘]; Var Source, Temp : String ; I : Byte ; Done : Boolean ; Begin Write(‘Enter string: ‘); ReadLn(Source); Done := False; I := 1; Temp := »; Repeat While (Not (Source[I] in Syms)) And (I<=Length(Source)) Do Begin Temp := Temp + Source[I]; Inc(I); End; If I = Length(Source) Done := True; If Length(Temp) > 5 Then WriteLn(Temp); Temp := »; Until Done; End. Хм, не так муторно, как думал |
Vesper |
|
Цитата Eiden, 4.02.04, 01:13
Then забыл Цитата Eiden, 4.02.04, 01:13
Имхо лучше проверять на [‘A’..’Z’,’a’..’z’] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется. |
Eiden |
|
Неудивительно, я теперь только на C++ кодю Цитата Имхо лучше проверять на [‘A’..’Z’,’a’..’z’] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется. Да, согласен. Но тогда уж и на ‘А’..’Я’,’а’..’п’,’р’..’я’. В итоге в коде исправляем две строчки: Syms = [‘A’..’Z’,’a’..’z’,’А’..’Я’,’а’..’п’,’р’..’я’] While (Source[I] in Syms) And (I <= Length(Source)) Do Ну про тот Then не забыть Сообщение отредактировано: Eiden — 04.02.04, 09:29 |
Юлия |
|
Скажите а каким образом предложение разбито не слова?? |
Eiden |
|
Оно разбито на слова. Слово — последовательность символом русского или латинского алфавита. |
Юлия |
|
Хорошо, а что тогда является разделителeм для слов!?? |
Some1 |
|
А как обычно: Добавлено в 04.02.04, 19:40: |
Юлия |
|
Temp:=» —-Непонятно что присваивается?? Программу почему то циклит, можете кто-то показать хоть пример как надо вводить предложение!!! |
Some1 |
|
Ну вот. Точно работает. Только принцип немного другой — проверяем с конца строки к началу. Что вобщем-то одно и то-же: const prepen=[‘;’,’:’,’!’,’?’,’,’,’.’,’ ‘,'»‘,’-‘]; var s:string; p,o:byte; begin write(‘Введите предложение: ‘); readln(s); p:=length(s); repeat if s[p] in prepen then dec(p) else begin o:=p; while (p>0) and not (s[p] in prepen) do dec(p); if o-p=5 then writeln(copy(s,p+1,5)); end; until p=0; end. |
Юлия |
|
Покажите пожалуйста в данной программе пример ввода предложения!! |
Eiden |
|
Цитата Temp:=» —-Непонятно что присваивается?? присваивается пустая строка, то есть ничего. Переменная типа String (строка) как бы обнуляется. Как программу циклит? |
Vesper |
|
кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по «не-символу». То есть строчку Цитата Eiden, 4.02.04, 01:13 надо заменить на If I = Length(Source) Then Done := True Else Inc(I); ЗЫ: Опять Then пропустил. Ну это не страшно. Сообщение отредактировано: vesper1 — 07.02.04, 07:41 |
Eiden |
|
Цитата кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по «не-символу». Угу, точно, спасибо! Просто привык такие вещи через цикл с постусловием делать (там i точно увеличивается), а тут что-то не подумал. Сообщение отредактировано: Eiden — 08.02.04, 20:24 |
Юлия |
|
Всем спасибо за помощь!!!! |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Pascal
- Следующая тема
[ Script execution time: 0,0472 ] [ 15 queries used ] [ Generated: 27.05.23, 13:51 GMT ]
program lab_pascal; uses Crt; const let=['А'..'Я','а'..'я']; sl='три'; k=Length(sl); var s:String; jpos:Integer; instr:Boolean; begin instr:=False; ClrScr; Writeln('Введите строку:'); Readln(s); jpos:=Pos(sl,s); if (jpos<>0) and (not(s[jpos-1] in let)) and (not(s[jpos+k] in let)) then instr:=True; if instr then Writeln('Слово присутствует в строке.') else Writeln('Слово не присутствует в строке.'); Readln; end.
Как найти в определенном предложении всё слова, где присутствуют цифры.
То есть в итоге вывести количество таких слов.
Делал вот так но что то не работает
Function num_count(s:string):integer;
Var i,num:integer;
n:0..9;
word:string;
begin
num:=0;
word:='';
for i:=1 to Length(S) do //просматриваем всю строку
begin
if(S[i]=' ') then //если пробел то новое слово
word:=''
else
begin
//если находим цифру то прибавляем счетчик
if Pos(inttostr(n),word)<>0 then
num:=num+1;
word:=word+S[i];
Continue;
end;
Result:= num;
end;end;
задан 15 дек 2011 в 13:18
2
Вариант выше при пробелах подряд в середине и конце строки ошибается
А так же использует долгие функции
Вот приемлимый код по скорости и объему кода
function num_count(s:string):integer;
var
i,num,len:integer;
begin
num:=0;
i:=1;
len:=length(s);
while (i<=len) do
if (s[i] in ['0'..'9'] )
then
begin
inc(num);
while ( (s[i] <> ' ') and (i<=len) ) do inc(i);
end
else inc(i);
result:= num;
end;
ответ дан 15 дек 2011 в 16:37
Поправил.
Function num_count(s:string):integer;
Var
i,num:integer;
begin
num:=0;
i:=1;
While (S[Length(S)]=' ') Do // удаляю пробелы в конце
Delete(S, Length(S), 1);
// Вместо предыдущего цикла в Delphi можно использовать S:=Trim(S);
While (i<=Length(S)) Do
Begin
If (S[i]=' ') Then
Begin
Repeat // теперь не ошибётся
delete(S, 1, 1);
Until (S[1]<>' ');
i:=1;
End;
if (S[i] In ['0'..'9']) then
Begin
num:=num+1;
If (Pos(' ', S)=0) Then
Break // можно написать так
{Begin // или так
Result:= num;
Exit;
End}
Else
delete(S, 1, Pos(' ', S));
i:=1;
End
Else
Inc(i);
End;
Result:= num;
end;
Теперь мой вариант не ошибается, если пробелов в центр строки натыкать, хотя достаточно велик по объёму кода (оптимизацией я тут не занимался — написал то, что первое в голову пришло).
ответ дан 15 дек 2011 в 13:30
DelphiM0ZGDelphiM0ZG
3,03714 серебряных знаков18 бронзовых знаков
2