Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [VB6]Найти в строке однобуквенные предлоги


Автор: FRAGNATIC 15.5.2008, 19:11
Задание: Ввести с клавиатуры предложение на русском языке, заканчивающееся точкой. Определить, встречаются ли в данной строке однобуквенные предлоги и частицы, если "да", то подсчитать, сколько раз, если нет — напечатать сообщение.

Автор: neic 15.5.2008, 23:14
Код

k = Len(text1)

For i=1 to k
 simvol = mid(text,i,1)
 If simvol = "а" or simvol = "и" ... then
             y = y + 1
 end if
next

if y <> 0 then
      msgbox(y)
else
      msgbox("Однобуквенные предлоги и частицы отсутствуют")
end if


вместо ... вставишь другие варианты

Автор: FRAGNATIC 15.5.2008, 23:56
Спасибо =) проверим ) хотя может имелось ввиду именно найти одну букву в окружении пробелов либо пробела и точки.
но думаю и такое прокатит)

Автор: FRAGNATIC 16.5.2008, 00:36
скорее даже не правельно. ведь оно у тебя просто буквы "а" и "и" ищет. не учитыая в слове они или просто так) 

Автор: neic 16.5.2008, 20:39
Хм...ты уж мог уже и доработать

Код

k = Len(Text1)
For i = 1 To k
 simvol = Mid(Text1, i, 1)
 If i > 1 Then
 simvol_nazad = Mid(Text1, i - 1, 1)
 End If
 simvol_vpered = Mid(Text1, i + 1, 1)
 
 If simvol_nazad = "," Or simvol_nazad = "." Or simvol_nazad = " " And simvol_vpered = "," Or simvol_vpered = "." Or simvol_vpered = " " Then
 If simvol = "а" Or simvol = "и" Then
             y = y + 1
 End If
 End If
Next
If y <> 0 Then
      MsgBox (y)
Else
      MsgBox ("Однобуквенные предлоги и частицы отсутствуют")
End If


Добавлено через 8 минут и 13 секунд
В simvol_nazad (simvol_vpered) можешь вставить другие значения, кроме многоточия.

Если хочешь чтобы было многоточие, то нужно делать ещё одну проверку...

Приблизительно так:
Код

...
If i > 3 Then
 mnogotoch_nazad = Mid(Text1, i - 3, 3)
 End If
 mnogotoch_vpered = Mid(Text1, i + 1, 3)
...
If simvol_nazad = "," Or simvol_nazad = "." Or simvol_nazad = " " or mnogotoch_nazad = "..." And simvol_vpered = "," Or simvol_vpered = "." Or simvol_vpered = " " or mnogotoch_vpered="..." Then
 If simvol = "а" Or simvol = "и" Then
             y = y + 1
 End If
 End If
...

Автор: Akina 17.5.2008, 00:18
1) Если разделителями могут быть только пробелы, запятые и точки, разумнее сначала заменить все их на пробелы.
Код

StrToCheck = Replace(Replace(StrToCheck, ".", " "), ",", " ")

2) Чем бегать по строке - проще порезать ее на куски и чекать длины слов.
Код

Words = Split(StrToCheck)
for i = 0 to ubound(Words)
  if len(Words(i)) = 1 Then Count = Count + 1
next

Автор: neic 17.5.2008, 11:48
Akina
Можно извращаться до бесконечности smile 
Я привёл простой и понятный код, так сказать, что первое в голову полезло =)

Автор: FRAGNATIC 19.5.2008, 15:29
Всем огромное спасибо. оба варианта хороши.
1 тем что показывает логику, которую скорее всего попросят именно.
второй простотой =)

Автор: Akina 19.5.2008, 18:34
Цитата(neic @  17.5.2008,  12:48 Найти цитируемый пост)
Я привёл простой и понятный код, так сказать, что первое в голову полезло 

Я бы назвал это "решением в лоб".

А наиболее правильное решение - использовать WScript.RegExp.Match.

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