powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с IndexOF
18 сообщений из 18, страница 1 из 1
проблема с IndexOF
    #37176167
ma1oiDream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задание таково: В заданной строке заменить знаки препинания (.,:;-!?) на пробелы.
я написал код через 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
проблема с IndexOF
    #37176243
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не просто
Код: plaintext
1.
For j =  0  To m.Length -  1 
  g=join(split(g,m.Substring(j,  1 )))
?
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37176244
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1oiDream,

Сначала надо определиться с языком, на котором это просили написать. IndexOf - это не VB.
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37176246
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
проблема с IndexOF
    #37176261
ma1oiDream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proma1oiDream,

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

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

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



тебе не кажется это слегка извращением?
т. е. вообще не проще забить всё это в одну переменную, которая меняла бы своё значение?
или так невозможно?
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37176284
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда вообще регулярные выражения можно применить:
Код: 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
проблема с IndexOF
    #37176288
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1oiDreamв методичке пишут мол это метод VB.
А может все-таки VB.NET? Это другая ветка форума.
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37176289
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну приведите тогда полный текст задания.
Может, вам задали изучить именно использование IndexOf, просто препод не стал заморачиваться с подходящим примером, где бы его использование было оправдано.
С другой стороны, вы всегда можете мотивировать преподу, что имеется "более понятный и короткий путь", те же вышеуказанные Join/Split или Replace. Или ещё поискать... Вот, например, Replace по сути соответствует ChrTran() в VFP, но я-то помню, что в VFP имеется и StrTran(). Ваше задание там решалось бы одной строкой:
Код: plaintext
g = StrTran(g, '.,:;-!?', Space( 7 ))
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37176291
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1oiDreamтебе не кажется это слегка извращением?
Мне кажется извращением твой двойной вложенный цикл и Substring для решения задачи, для которой все это не требуется. То что я привел - самый скоростной вариант кода.
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37178313
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
проблема с IndexOF
    #37178320
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

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

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

скукотищаЗЫ: как думаешь, сравнится мой изврат по скорости с предложенным тобой ступенчатым реплэйсом?
Пожалуй может сравниться, ибо замена идет "один-в-один" по длине, а стандартный реплейс вряд ли оптимизирован под такую замену.
Ну а что тут думать - прыгатьмерить надо. (с) Мне - лень ))
...
Рейтинг: 0 / 0
проблема с IndexOF
    #37178389
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
проблема с IndexOF
    #37178426
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шокер, а ты ещё утверждал, что Скукотища и Я - одно и то же лицо

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

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


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