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


Автор: yraloz 8.3.2006, 11:29
Товарищи программисты, помогите пожалуйста
решить одну задачку.
Дан текст, между словами либо пробел, либо запятая, выделить из него:
1.Слова в которых нет цифр
2.Слова в которых одни цифры
3.Смешанные слова.

Спасибо большое за помощь.

Автор: Guedda 8.3.2006, 11:57
Здесь Вам помогут с кодом, но не напишут за Вас полностью код. Напишите, что у Вас именно не получается, либо направляйтесь в раздел http://forum.vingrad.ru/index.php?showforum=142. Там Вам обязательно помогут.

Автор: profispb 8.3.2006, 13:05
Алгоритм:
Ставишь условие читать до запятой или пробела лучше сразу заносить в массив проверяешь условие нет ли в массиве цифр, потом проверяешь на условие что слово из только одно типа данных Integer. И есть ли в массиве тот и другой тип char и Integer. smile

Автор: NewDima 9.3.2006, 11:07
Во первых, откуда читаешь слова? Например здесь с файла лучше всего.
Файл типа стринг. Читаешь по подстроке, проверяешь наличие цифр, если есть то в процедуру <есть ли буквы>, если есть, то это слово- смешанное, иначе оно полностью из цифр, иначе слово настоящее

Автор: Ozzя 9.3.2006, 11:07
Выделяем из текста слова с помощью ф-ции getwords:
http://forum.pascal.net.ru/index.php?s=&showtopic=2361&view=findpost&p=28157
Далее:
1.
Код

Function IsInSrtringDigitsNo (s:string):boolean;
var
  i:Integer;
begin
  IsInSrtringDigitsNo:=True;
  for i:=1 to length(s) do
    if s[i] in ['0'..'9'] then
      begin
        IsInSrtringDigitsNo:=False;
        Break;
      end;
end;

begin
 if IsInSrtringDigitsNo('absbchskasd1') then
   write('yes!')
 else
    write('no!');
 ReadLn;
end.
2.
Код

Function IsInSrtringDigitsOnly (s:string):boolean;
var
  i:Integer;
begin
  IsInSrtringDigitsOnly:=True;
  for i:=1 to length(s) do
    if not (s[i] in ['0'..'9']) then
      begin
        IsInSrtringDigitsOnly:=False;
        Break;
      end;
end;

begin
 if IsInSrtringDigitsOnly('12q34567890') then
   write('yes!')
 else
    write('no!');
 ReadLn;
end.

3. Смешанные с чем? Цифры + латинские буквы? Цифры + латинские/русские буквы?

Автор: NewDima 9.3.2006, 11:07
Простите, если чей написаный алгоритм переписал, времени нет читать

Автор: yraloz 9.3.2006, 13:22
Да, смешанные в смысле и цифры и буквы(русские и англ)
Добавлено @ 13:28
В результате эти слова должны быть выведены на экран

Автор: Snowy 9.3.2006, 14:39
Модератор: Название темы должно отражать ее суть!

Автор: armageddon 9.3.2006, 18:34
по-поводу вывода на экран, то какие проблемы?
алгоритм проверки написан выше(не проверял, но надеюсь работает)
ну а если подходит, то пусть и вывод на экран это слово

Автор: yraloz 10.3.2006, 20:46
А как задавать условия поиска если слова занесены в массив типа string?

Автор: Ozzя 11.3.2006, 10:28
Функция GetWords возвращает количество найденных слов и сами слова в переменную типа TWords = Array[1 .. 100] Of String[100];
Твой код:
Код

var
  SourceString:string;
  OutputArray:TWords;
...
CountOfWords:=GetWords(SourceString, OutputArray);
for i:=1 to CountOfWords do
  begin
     { Поиск по условию № 2 }
      if IsInSrtringDigitsOnly(OutputArray[i]) then
        {условие удовлетворено, что-то с этой строкой делаешь } 

     { Поиск по условию № 1 }
      if IsInSrtringDigitsNo(OutputArray[i]) then
        {условие удовлетворено, что-то с этой строкой делаешь } 
     и т.д.
  end;

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