Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с IndexOF / 18 сообщений из 18, страница 1 из 1
21.03.2011, 20:23
    #37176167
ma1oiDream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
задание таково: В заданной строке заменить знаки препинания (.,:;-!?) на пробелы.
я написал код через SubString, но препод сказал что надо сделать через IndexOf, а как это сделать я не особо могу допедрить.
в общем вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 Public Sub poisk(ByRef g As String)
        Dim r, z As String
        For j =  0  To m.Length -  1 
            r = m.Substring(j,  1 )
            For i =  0  To g.Length -  1 
                z = g.Substring(i,  1 )
                If z = r Then
                    g = g.Replace(z, " ")
                End If
            Next i
        Next j
    End Sub
тут я строку g ввожу в текстбоксе, знаки препинания, которые подлежат замене тоже.
первый цикл это перебор знаков препинания из строки m, а во втором он ищет совпадения со строкой g, и заменяет их.
в общем я сделал это таким образом, а как сделать через IndexOf понять не могу.
на сколько я понял, как сказал препод он должен использоваться где то во втором цикле.
...
Рейтинг: 0 / 0
21.03.2011, 21:41
    #37176243
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
А почему не просто
Код: plaintext
1.
For j =  0  To m.Length -  1 
  g=join(split(g,m.Substring(j,  1 )))
?
...
Рейтинг: 0 / 0
21.03.2011, 21:41
    #37176244
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
ma1oiDream,

Сначала надо определиться с языком, на котором это просили написать. IndexOf - это не VB.
...
Рейтинг: 0 / 0
21.03.2011, 21:43
    #37176246
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
AkinaА почему не просто
Код: plaintext
1.
For j =  0  To m.Length -  1 
  g=join(split(g,m.Substring(j,  1 )))
?

потому что
Код: plaintext
g=Replace(Replace(Replace(Replace(g,","," "),"."," "),":"," "),";"," ")

а IndexOf - это, повторю, из другой оперы
...
Рейтинг: 0 / 0
21.03.2011, 21:59
    #37176261
ma1oiDream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Shocker.Proma1oiDream,

Сначала надо определиться с языком, на котором это просили написать. IndexOf - это не VB.
Shocker.Pro,

в методичке пишут мол это метод VB.
он возвращает индекс первого вхождения символа в строке.

что то у меня складывается такое чувство что меня в универе где то на*пали...
...
Рейтинг: 0 / 0
21.03.2011, 22:17
    #37176272
ma1oiDream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Shocker.Pro
потому что
Код: plaintext
g=Replace(Replace(Replace(Replace(g,","," "),"."," "),":"," "),";"," ")



тебе не кажется это слегка извращением?
т. е. вообще не проще забить всё это в одну переменную, которая меняла бы своё значение?
или так невозможно?
...
Рейтинг: 0 / 0
21.03.2011, 22:38
    #37176284
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Тогда вообще регулярные выражения можно применить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function Replace_All(sStr As String)
Dim objRegExp As Object

Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True: objRegExp.IgnoreCase = True
objRegExp.Pattern = "[\.,\,,\:,\;,\-,\!,\?]"
Replace_All = objRegExp.Replace(sStr, " ")
End Function
:-)
...
Рейтинг: 0 / 0
21.03.2011, 22:41
    #37176288
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
ma1oiDreamв методичке пишут мол это метод VB.
А может все-таки VB.NET? Это другая ветка форума.
...
Рейтинг: 0 / 0
21.03.2011, 22:42
    #37176289
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Не, ну приведите тогда полный текст задания.
Может, вам задали изучить именно использование IndexOf, просто препод не стал заморачиваться с подходящим примером, где бы его использование было оправдано.
С другой стороны, вы всегда можете мотивировать преподу, что имеется "более понятный и короткий путь", те же вышеуказанные Join/Split или Replace. Или ещё поискать... Вот, например, Replace по сути соответствует ChrTran() в VFP, но я-то помню, что в VFP имеется и StrTran(). Ваше задание там решалось бы одной строкой:
Код: plaintext
g = StrTran(g, '.,:;-!?', Space( 7 ))
...
Рейтинг: 0 / 0
21.03.2011, 22:43
    #37176291
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
ma1oiDreamтебе не кажется это слегка извращением?
Мне кажется извращением твой двойной вложенный цикл и Substring для решения задачи, для которой все это не требуется. То что я привел - самый скоростной вариант кода.
...
Рейтинг: 0 / 0
22.03.2011, 22:23
    #37178313
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Shocker.Pro,
в копилку извращений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub strtobytearr()
Const sTMP$ = "я написал код через SubString; но препод сказал что надо: сделать через IndexOf. А как это сделать я не"
'Const sTMP$ = "e Informants. Keep your head up, and continue the good fight!"
Dim a() As Byte, i%, s$

ReDim a(Len(sTMP))

a = sTMP

For i =  0  To UBound(a) Step  2 
    Select Case a(i)
    Case  44 ,  46 ,  58 ,  59 
        If a(i +  1 ) =  0  Then a(i) =  32 
    End Select
Next i

s = a
MsgBox s
Debug.Print sTMP
Debug.Print CStr(a)
End Sub
...
Рейтинг: 0 / 0
22.03.2011, 22:27
    #37178320
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
скукотища,

а собсно
нужно сделать через метод IndexOf
так и надо создать класс, объявить в нем такой метод и сделать через него.... тебе же скучно
...
Рейтинг: 0 / 0
22.03.2011, 22:36
    #37178331
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
2 Shocker.Pro,
ОФФскучно, но не настолько. Да и с классиками у меня с детсва проблемы...
ЗЫ: как думаешь, сравнится мой изврат по скорости с предложенным тобой ступенчатым реплэйсом?
...
Рейтинг: 0 / 0
22.03.2011, 22:56
    #37178343
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
скукотищаДа и с классиками у меня с детсва проблемы...

Так вот тебе живой пример - подучись

скукотищаЗЫ: как думаешь, сравнится мой изврат по скорости с предложенным тобой ступенчатым реплэйсом?
Пожалуй может сравниться, ибо замена идет "один-в-один" по длине, а стандартный реплейс вряд ли оптимизирован под такую замену.
Ну а что тут думать - прыгатьмерить надо. (с) Мне - лень ))
...
Рейтинг: 0 / 0
23.03.2011, 00:16
    #37178389
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Shocker.ProТак вот тебе живой пример - подучись
Проблема не в написании, проблема в непонимании НАХ городить класс(ы) для простой процедурной задачи...
померил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub speedometr()
Const sFILE$ = "c:\temp\mnogabukav.txt"
Dim f As Object, k0&, k&, k1&, s$, a, i%, t!
Dim arr() As Byte
Set f = CreateObject("scripting.filesystemobject").opentextfile(sFILE,  1 )
a = Split(f.readall, vbCrLf)
f.Close: Set f = Nothing

t = Timer
For k0 =  0  To UBound(a)
For k =  0  To UBound(a)
For k1 =  0  To UBound(a)
'    arr = a(k1)
'    For i = 0 To UBound(arr) Step 2
'        Select Case arr(i)
'        Case 44, 46, 58, 59
'            If arr(i + 1) = 0 Then arr(i) = 32
'        End Select
'    Next i
'    s = arr
    s = Replace(Replace(Replace(Replace(a(k1), ",", " "), ".", " "), ":", " "), ";", " ")
Next k1
Next k
Next k0
Debug.Print Timer - t
Erase arr, a
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
файл mnogabukav.txt:
строк 190
мин.длина строки   11
макс.длина строки 850
ср.длина строки   180 

с реплэйсом      ~78с
с массивом байт ~163с
...
Рейтинг: 0 / 0
23.03.2011, 01:22
    #37178426
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
Шокер, а ты ещё утверждал, что Скукотища и Я - одно и то же лицо

"Ещё раз скажу - никто не обнимет необъятного" (с)

Так что будем ждать, пока человек всё-таки представится. Либо расскажет, зачем настолько устал расписываться под мембером, что пишет теперь в ауте...
...
Рейтинг: 0 / 0
23.03.2011, 02:46
    #37178465
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
AndreTM,
cижу, никого не трогаю, примус починяю. (с)
Под мембером овечать или "анонимусом", разве так существенно?
...
Рейтинг: 0 / 0
10.04.2011, 16:33
    #37208874
ma1oiDream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с IndexOF
В общем спасибо сдал лабу с помощью
g=Replace(Replace(Replace(Replace(g,","," "),"."," "),":"," "),";"," ")
было забавно, на её лице было дикое удивление:)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с IndexOF / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]