Задача на строки, работа со строками. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на строки, работа со строками. |
Олег. |
Сообщение
#1
|
Гость |
Ребят,помогите кому не сложно, в следующей задаче. Щас делаю потихонбку- как что напишу буду выкладывать. Прошу помощи т.к. со строками никогда не работал.
Задание: Дан массив символьных строк.Длина каждой строки не более 80ти символов. Строка состоит из слов, разделенных пробелами. В начале каждой строки пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор пока не будет введена пустая строка. Требуется: 1.Выделить из каждой строки и напечатать слова: не содержащие латинских букв 2.Среди слов найти: самое длинное 3.Преобразовать строку которой принадлежит найденное слово сред. образом: повторить все цифры. Заранее благодарен всем за любую помощь. |
Артемий |
Сообщение
#2
|
Помощник капитана Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: 2 |
Разбиение на слова - Все способы + показывай что делал,поправим. + задачи похожие были.
-------------------- Dum spiro spero!
|
Гость |
Сообщение
#3
|
Гость |
РЕБЯТА НАШЕЛ,НО ЧУТЬ ПОПРАВИТЬ НАДО:
Там немного совсем исправить+комменты есть. Задание: Дан массив символьных строк. Длина каждой строки не более 80 символов. Строка состоит из слов, разделенных пробелами. В начале каждой строки пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор, пока не будет введена пустая строка. Требуется: 1. Выделить из каждой строки и напечатать слова: 1. Не содержащие русских букв. 2. Среди выделенных слов найти: 4. Содержащее максимальную цепочку из нулей. 3. Преобразовать строку, которой принадлежит наибольшее слово следующим образом: 3. Удалить все слова, содержащие цифры. (Каждое задание выполняется в виде отдельной процедуры) Внешняя спецификация. Входные: массив строк А. Выходные: слова, в соответствии с заданием. Тестовые примеры. Строки: exam пример пр exa examprimer 0g0g g090008 876d прих Результат: Несодрусбукв: exam Несодрусбукв: exa Несодрусбукв: examprimer Несодрусбукв: 0g0g Несодрусбукв: g090008 Несодрусбукв: 876d Максцепнулей: g090008 Словабезцифр: examprimer прих Листинг программы program l3; uses crt;{подключение библиотеки} var{инициализация переменных} str: array [0..25] of string[80]; w: array [0..25, 0..25] of string[80]; cntw: array [0..25] of integer; wnr: array [0..10, 0..10] of string[20]; cntwnr: array [0..25] of integer; m, i, j: integer; s: string[80]; procedure FindWord(str: string; q: integer); {процедура, ищет в строке слова, записывает в массив} var n, i, j, k: integer; t: byte; begin k:=0; str:=str+' '; n:=pos(' ',str); while length(str)<>0 do begin if (str[1]<>' ') then begin w[q,k]:=copy(A,1,n-1);{копирование куска строки в массив} delete(A,1,n-1);{удаление этого куска строки} n:=pos(' ',A);{определение местоположение пробела} k:=k+1; end else begin delete(A,1,1);{удаление пробела, если он стоит первым} n:=pos(' ',str); end; end; cntw[q]:=k; {счетчик слов} end; procedure NoRus; { процедура, ищет слова, не содержащие русских букв } var i, j, k, z: integer; flag: boolean; begin cntwnr[i]:=0; {счетчик слов, не сод рус букв} for i:=0 to m-1 do begin z:=0; for j:=0 to cntw[i]-1 do{цикл по словам массива w} begin flag:=false; for k:=1 to length(w[i,j])-1 do if (w[i,j,k] in ['а'..'я']) or (w[i,j,k] in ['А'..'Я']) then flag:=true; if not flag then begin wnr[i,z] := w[i,j];{массив слов, не сод рус букв} cntwnr[i] := cntwnr[i]+1; writeln('несодрусбукв: ',wnr[i,z]); {печать массива wnr} z:=z+1; end; end; end; end; function WhatZ(s: string): integer; {функция, считает в слове цепочку нулей} var i, cnt, max: integer; begin cnt := 0; {счетчик нулей} max := 0; for i:=1 to length(s)-1 do if (s[i] = '0') then cnt:=cnt+1 else begin if cnt > max then max := cnt; cnt := 0; end; if cnt > max then {end of string} max := cnt; WhatZ := max; end; function FindStrMaxWord: integer; {поиск самого длинного слова в строке} var imax, x, i, j, max: integer; begin max:=0; for i:=0 to m-1 do for j:=0 to cntw[i]-1 do begin x := length(w[i,j]); if x > max then begin max := x; imax := i; end end; FindStrMaxWord := imax; end; procedure Zeros; {среди слов, не сод рус букв ищет слово, сод макс цепочку из нулей} var i, j, k, imax, jmax, max, x: integer; begin max := 0; imax := 0; jmax := 0; for i:=0 to m-1 do for j:=0 to cntw[i]-1 do begin x := WhatZ(wnr[i,j]); if x > max then begin max := x; imax := i; jmax := j; end; end; if max <> 0 then {'0' exist} writeln('максцепнулей: ',wnr[imax,jmax]); end; procedure DelDig; {процедура, удаляет числа в словах строки, сод самое длинное слово} var k, i, j: integer; digexist: boolean; begin digexist:=false; write('словабезцифр:'); i:=FindStrMaxWord; for j:=0 to cntw[i] do begin digexist:=false; for k:=1 to length(w[i,j]) do if w[i,j,k] in ['0'..'9'] then digexist:=true; if not digexist then write(' ',w[i,j]); end; end; { ----------- main -------------} begin clrscr; writeln('Дан массив символьных строк. Длина каждой строки не более 80 символов.'); writeln('Строка состоит из слов, разделенных пробелами. В начале каждой строки'); writeln('пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор,'); writeln('пока не будет введена пустая строка. Требуется:'); writeln('1.Выделить из каждой строки и напечатать слова не содержащие русских букв.'); writeln('2.Среди выделенных слов найти содержащее максимальную цепочку из нулей.'); writeln('3.Преобразовать строку, которой принадлежит наибольшее слово следующим образом:'); writeln(' Удалить все слова, содержащие цифры.'); writeln('(Каждое задание выполняется в виде отдельной процедуры)'); m:=0; repeat{ввод строк, пока не введена нулевая строка} writeln('Введите строку'); readln(s); if length(s)<>0 then begin str[m] := s; {запись строк в массив строк} m := m+1; end; until length(s)=0; for i:=0 to m-1 do FindWord(str[i],i);{выполнение вышеописанных процедур} NoRus;{------1-------} Zeros;{--------2------} DelDig;{-------3------} readln; {ждем нажатия} end. |
Гость |
Сообщение
#4
|
Гость |
Народ, ну ктонить посмотрит?
|
Текстовая версия | 23.12.2024 19:32 |