Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 13:29   #1
O'neeL
Пользователь
 
Аватар для O'neeL
 
Регистрация: 10.12.2011
Сообщений: 36
По умолчанию Pascal: поиск слова в строке содержащего наибольшее количество цифр

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

Код:
program lab5;
uses crt;
const
     digits: set of char=['0','1','2','3','4','5','6','7','8','9'];
var s,sSorted:string;
    i,firstDiCount,secondDiCount,firstWordPos,secondWordPos,firstWordLength,secondWordLength:integer;
begin
{----}
     i:=1;
     firstDiCount:=0;
     secondDiCount:=0;
     s:='';
     sSorted:='';
{----}
     clrscr;
     repeat
           writeln('Enter the string:');
           readln(s);
     until (length(s)<>0);
{----}
                i:=1;
                firstDiCount:=0;
                firstWordPos:=0;
                firstWordLength:=0;
                secondDiCount:=0;
                secondWordPos:=0;
                secondWordLength:=0;
                while (s[1]=' ') do
                      delete(s,1,1);
                while (i<=length(s)) do
                      begin
                           if (s[i]<>' ')
                              then
                                  begin
                                       if ((i=1) or (s[i-1]=' '))
                                          then secondWordPos:=i
                                          else;
                                       inc(secondWordLength);
                                       if (s[i] in digits)
                                          then inc(secondDiCount)
                                          else;
                                  end
                              else
                                  begin
                                       if (secondDiCount>firstDiCount)
                                          then
                                              begin
                                                   firstDiCount:=secondDiCount;
                                                   firstWordPos:=secondWordPos;
                                                   firstWordLength:=secondWordLength;
                                                   secondDiCount:=0;
                                                   secondWordPos:=0;
                                                   secondWordLength:=0;
                                              end
                                          else;
                                  end;
                           inc(i);
                      end;
                sSorted:=sSorted+' '+copy(s,firstWordPos,firstWordLength);
                if sSorted[1]=' '
                   then delete(sSorted,1,1)
                   else;
                delete(s,firstWordPos,firstWordLength+1);
                writeln(sSorted);
                writeln(s);
                readkey;
end.
Подскажите где искать ошибку, попытаюсь сам исправить.
O'neeL вне форума Ответить с цитированием
Старый 10.12.2011, 14:59   #2
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Мне не понятен первый цикл While: пока S[1] = пробелу, оно может быть и не равно. Если нужно слово найти, то равно надо заменить на неравно (<>). Так найти одно слово, удалить его, затем другое. Можно эти слова в массив сохранять, но можно обойтись и без него: анализировать каждое слово на количество цифр и в переменную записывать, если попалось слово с большим количеством цифр - записать новое значение в переменную..., и так далее... Я бы циклами при поиске пробела не пользовался бы: есть же функция в Паскале Pos(подстрока (пробел в Вашем случае), строка (S)) результат - целое число - номер первой позиции подстроки в строке, если такой подстроки нет - результат равен нулю. Так что можно цикл мотать пока эта функция не равна нулю, а во вложенном цикле уже выделять и анализировать слова...
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..

Последний раз редактировалось <- DelpHIFanat ->; 10.12.2011 в 15:05.
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 10.12.2011, 15:22   #3
O'neeL
Пользователь
 
Аватар для O'neeL
 
Регистрация: 10.12.2011
Сообщений: 36
По умолчанию

первый цикл while просто удаляет пробелы в начале строки, если такие есть.
в принципе придумал как реализовать с помощью pos
O'neeL вне форума Ответить с цитированием
Старый 10.12.2011, 15:34   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
var
  s:string;
  buf:string;
  k:integer;
  Kbuf:integer;
  res:string;
  i:integer;
begin
  readln(s);
  s:=s+' ';
  k:=-1;res:='';
  while (s[1]=' ') do delete(s,1,1);
  while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
  while s<>'' do begin
     kbuf:=0;
     buf:=Copy(s,1,pos(' ',s)-1);
     for i:=1 to length(buf) do
       if buf[i] in ['0'..'9'] then inc(kbuf);
     if kbuf>k then begin res:=buf; k:=kbuf;end;
     delete(s,1,pos(' ',s));
  end;
  writeln(res,'---> ',k);
readln;
end.
рез-тат
Цитата:
wqeeqwe qweqwe qwe678qwe qwewqewqe 67889 sdqwdw 67890000
67890000---> 8
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 10.12.2011 в 15:41.
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В матрице A[1..N,1..M] упорядочить по убыванию элементы столбца, содержащего наибольшее количество отрицательных чисел Hitzor Помощь студентам 1 25.10.2011 15:35
Поиск слова в строке и редактирование этого слова Wasili4 Microsoft Office Excel 3 22.06.2011 21:06
Пусть дан текст. Найдите наибольшее количество цифр, идущих подряд. abakuz Помощь студентам 5 28.05.2011 17:08
Поиск строки, содержащей наибольшее количество пробелов Студент1000 Microsoft Office Word 3 28.05.2011 00:27
Найти номер первой по порядку строки, которая содержит наибольшее количество цифр spr1te Помощь студентам 1 17.12.2010 19:58