Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 8
1

Заменить функцию InStrRev функциями Right, Mid или другими функции

12.05.2013, 09:09. Показов 4687. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Скажите пожалуйста возможно ли в следующим задание заменить функцию "InStrRev" функциями "Right", "Mid" или другими функции.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub PR6()
Dim S1 As String
Dim S2 As String
Dim a As Byte
Dim b As Byte
S1 = InputBox("Введите строку")
a = InStr(S1, ",")
If a = 0 Then
MsgBox ("В строке нет запятых")
Else
S2 = Replace(S1, ",", "*")
b = InStrRev(S1, ",")
If b = 0 Then
MsgBox ("В строке одна запятая в позиции ") & a & vbLf & vbLf & S2
Else
S2 = Replace(S1, ",", "*")
MsgBox ("Первый и последний запятые в позициях ") & a & " и " & b & vbLf & vbLf & S2
End If
End If
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2013, 09:09
Ответы с готовыми решениями:

В задании нельзя использовать gets, ctrcmp, ctrlen. Как их заменить другими функциями?
В задании нельзя использовать gets,ctrcmp, ctrlen. как их заменить другими функциями? #include...

Переименование txt файла функциями библиотеки fstream.h или другими, которые имеют возможность редактирования.?
Здравствуйте, как с помощью функций fstream.h переименовать текстовый файл, при каждом нажатии...

Переделать программу другими функциями.
#include <stdio.h> #include <conio.h> main() { clrscr(); int a = {1,2,3,4,5}, i; ...

почему сегодня mid("01",2,1)>11=False а mid("01",2,1)>day(date())=True? ;-)))
загадка

10
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
12.05.2013, 11:21 2
Заменить можно все и на все, но что мы тогда получим?
Этим S2 = Replace(S1, ",", "*") что Вы собирались выразить?. И второе. Вы определили, что запятых нет, и копаете дальше - есть они или нет.

Добавлено через 1 час 4 минуты
Можно так, собирая результат в массив:
Visual Basic
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 PR6()
Dim S1$, a&, b&, n&, mARR()
S1 = InputBox(Prompt:="Введите строку", _
                Default:="Fsdas, dssss - 2334, asgl as;;b'df, xlgtabis.")
n = 0
    If InStr(1, S1, ",", vbTextCompare) = 0 Then
        MsgBox "Нет никаких запятых."
        Exit Sub
    End If
    Do
        For a = 1 To Len(S1)
            b = InStr(a, S1, ",", vbTextCompare)
                If b <> 0 Then
                    n = n + 1
                    ReDim Preserve mARR(1 To n)
                    mARR(n) = b: a = b + 1
                End If
        Next 'a
    Loop Until a <> Len(S1)
    If UBound(mARR) = 1 Then
        MsgBox "В строке одна запятая в позиции - " & mARR(UBound(mARR))
            Else
                MsgBox "Первая и последняя запятые в позициях " & _
                    mARR(LBound(mARR)) & "  и  " & mARR(UBound(mARR))
    End If
End Sub
А еще лучше - через Regular Expressions, или словарь. Но можно еще кучей всякого, в т.ч. через Mid. А также можно использовать, как вспомогательное, strReverse (совместно с Instr). Короче - пластилин.
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
12.05.2013, 11:28 3
Для ответа на вопрос достаточно было заглянуть в справочник
InStrRev, InStr
Возвращает значение типа Variant (Long), указывающее позицию первого вхождения одной строки внутри другой
В отличии от функций Mid, Left, Right, которые
Возвращает значение типа Variant (String), содержащее указанное число символов строки.
Разницу между позицией и символом улавливаешь?
Вот и подумай чем можно заменить.
И ещё есть оператор Like, которым можно в данном случае воспользоваться.
Или инструкция Mid
Заменяет указанное число символов в переменной типа Variant (String) символами из другой строки.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
12.05.2013, 12:13 4
Ну да. Все зависит от намерений с результатами. Поэтому и пластилин.

Добавлено через 11 минут
Для поднятия настроения, с одной переменной, и тоже как вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub v2_PR6()
    Dim S1$
    S1 = InputBox(Prompt:="Введите строку", _
                Default:="Fsdas, dssss - 2334, asgl as;;b'df, xlgtabis.")
    If InStr(1, S1, ",", vbTextCompare) = 0 Then
        MsgBox "Нет никаких запятых."
        Exit Sub
    End If
    If InStr(1, S1, ",", vbTextCompare) = InStrRev(S1, ",", -1, vbTextCompare) Then
        MsgBox "В строке одна запятая в позиции - " & _
                                                InStr(1, S1, ",", vbTextCompare)
            Else
                MsgBox "Первая и последняя запятые в позициях " & _
                    InStr(1, S1, ",", vbTextCompare) & " и " & _
                        InStrRev(S1, ",", -1, vbTextCompare)
    End If
End Sub
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.05.2013, 16:08 5
Функция InStrRev появилась в VB6. В VB5 ее не было, поэтому для VB5 были написаны различные коды для замещения этой функции, например
http://www.freevbcode.com/ShowCode.asp?ID=1208

Добавлено через 6 минут
Цитата Сообщение от Igor_Tr Посмотреть сообщение
с одной переменной
В оригинальном коде переменных было меньше, чем в первом посте
Строки: Найти номера первой и последней по порядку запятой
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
12.05.2013, 16:19 6
Это скорее вариации на тему... Если не искать уже готовое. А с другой стороны, как преподы смотрят, если все - как в спортинтернате? В одинаковых костюмах?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
12.05.2013, 23:28 7
С моей точки зрения программирование это в первую очередь - умение "мыслить" на требуемом языке, во вторую - знание алгоритмов, и в третью - знание стандартных функций. Потому, что тот, кто понимает, как работает InstrRev, реализует ее на любой платформе.

Что же до самой функции, то я без нее обходился, написав нечто вроде:

Visual Basic
1
2
3
4
5
6
7
8
9
Function instrr(S as string, w as string) As long
  l&=len(w)
  For i&=Len(S) to 1 step -1
       if Mid$(S,i&,l&)=w then
          instrr=i
          exit for
       end if
  Next i&
End Sub
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 8
14.05.2013, 08:28  [ТС] 8
Само задание звучит так: "Найти номера первой и последней по порядку запятой. Заменить все запятые на звездочку."
Я показал код из верхнего поста преподавателю. Она сказала заменить InStrRev на функции из методички. В методичке даны: Asc, Chr, Lcase, Ucase, Left, Right, Mid, Len, LTrim, RTrim, Trim, Space, String, StrComp, InStr, Replace.
Вообщем чем проще выглядит код тем лучше.

Цитата Сообщение от Казанский Посмотреть сообщение
В оригинальном коде переменных было меньше, чем в первом посте
Строки: Найти номера первой и последней по порядку запятой
Это я специально расписал как учил нас преподаватель, чтоб вопросов было поменьше.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.05.2013, 09:44 9
Тогда и не заморачивайтесь. Достаточно три функции - Len, Instr и strReverse. Первая зпт. - Instr(1,mstr,",",vbTextCompare). Вторая зпт, если считать справа на лево, Instr(1,strReverse(mstr),",",vbTextCompare). В результате все будет так:
Visual Basic
1
2
First&=Instr(1,mstr$,",",vbTextCompare)
Second&=Len(mstr$) - (Instr(1,strReverse(mstr$),",",vbTextCompare) - 1)
И все. Пробуйте.

Добавлено через 19 минут
Забыл про замены. Если все менять - mstr$=Replace(mstr$, ",","*",1). А если только первую и последнюю, тогда:
mstr$=Replace(mstr$, ",","*",1,1)
mstr$=strReverse(Replace(strReverse(mstr$), ",","*",1,1)
Получается, что тогда для такой простенькой задачки нужно использовать аж четыри функции! Ого!
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
14.05.2013, 10:01 10
В конце концов, со строками можно работать вообще без встроенных функций
Нужно посчитать количество слов без встроенных функций
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.05.2013, 10:24 11
To "Казанский". Ага! Сейчас! Сами видите, там препод - "Отсюда - до туда, и смотреть только под ноги".
0
14.05.2013, 10:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2013, 10:24
Помогаю со студенческими работами здесь

Функции в JavaScript являются объектами первого класса, функциями высшего порядка или и тем и другим одновременно?
читаю пару книг и немного запутался... вопрос следующий: функции в JavaScript являются...

Right, Left, Mid функции
Как в VB.NET из строки справа взять 8 символов? Функцию Mid я нашел а вот Right или Left там...

Сократить/заменить функцию ИЛИ()
Есть две формулы: одна - для подсчета в диапазоне количества ячеек, содержащих определенное...

Пояснить результат работы функции Mid
похоже заработался Строка_таблицы_Word = &quot;9090690978, 84565665465, 8548375535&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru