Консультация № 201084
04.06.2021, 19:48
0.00 руб.
0 3 2
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Во введенном с клавиатуры предложении поменять порядок слов на обратный, т.е. первое слово поменять с последним, второе - с предпоследним и так до среднего слова.
(На языке VBA)
Огромное спасибо!!

Обсуждение

давно
Модератор
137394
1850
05.06.2021, 00:36
общий
это ответ
Код:
Sub Words()

S0 = ""
S0 = Trim(InputBox("Введите предложение"))

If S0 = "" Then
MsgBox "Предложение не введено"
Else
N = Len(S0)
Do
S0 = Replace(S0, " ", " ")
N1 = Len(S0)
If N1 = N Then Exit Do
N = N1
Loop

Mass = Split(S0, " ")
i1 = LBound(Mass)
i2 = UBound(Mass)

If i1 = i2 Then
S = S0
Else
N = CInt((i2 - i1 + 1) / 2) - 1
For i = 0 To N
S = Mass(i1 + i)
Mass(i1 + i) = Mass(i2 - i)
Mass(i2 - i) = S
Next

S = Mass(i1)
For i = i1 + 1 To i2
S = S + " " + Mass(i)
Next
End If
MsgBox S0 + vbCrLf + vbCrLf + S
End If

End Sub
5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Советник
400484
472
07.06.2021, 21:41
общий
это ответ
Добрый день.
Вот пример решения:
Код:

Sub Макрос1()
Dim text As String, result As String, count As Integer, temp As String
Dim arr
text = Лист1.Range("B1")
arr = Split(text, " ")

count = UBound(arr)
For i = 0 To count / 2
temp = arr(i)
arr(i) = arr(count - i)
arr(count - i) = temp
Next
result = Join(arr, " ")
Лист1.Range("B3") = result
End Sub
давно
Модератор
137394
1850
08.06.2021, 15:50
общий
Адресаты:
Спасибо solowey, напомнил о существовании функции Join
Вместо
Код:
        S = Mass(i1)
For i = i1 + 1 To i2
S = S + " " + Mass(i)
Next
End If
MsgBox S0 + vbCrLf + vbCrLf + S
в моём коде короче написать
Код:
    End If
MsgBox """" + S0 + """" + vbCrLf + vbCrLf + """" + Join(Mass, " ") + """"
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа