Преобразовать текст

Программирование на Visual Basic for Applications
hard03
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 26.12.2006 (Вт) 0:38

Преобразовать текст

Сообщение hard03 » 26.12.2006 (Вт) 0:43

Есть задача на VB 6.0
Дан текст, состоящий из n строк, 2 <= n <= 10. В каждой строке слова разделены произвольным количеством пробелов. Пробелы могут стоять перед первым словом и за последним. В тексте содержатся русские и латинские буквы. Если слово состоит только из латинских букв, то первую букву этого слова сделать прописной, а остальные буквы - строчными. Если слово состоит только из русских букв, то сделать все буквы слова - строчными. Если слово состоит из русских и латинских букв, то латинские буквы сделать прописными, а русские - строчными. Упорядочить строки текста по убыванию количества преобразованных символов. Вывести исходный и преобразованный тексты. Для решения задачи составить следующие подпрограммы:
- процедуру формирования списка слов одной строки;
- функцию преобразования отдельного слова;
процедуру упорядочивания cтрок преобразованного текста.

Как сие слабать в VB 6.0 Я с ним практически не работал - работаю на С++

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 26.12.2006 (Вт) 8:20

Осталось узнать, сколько автор даст денег, и можно приступать :)
подписи нет и не будет

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2006 (Вт) 9:52

Нет, почему же...
Если автор предоставит решение на C++, с которым работает, то можно и подумать...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

hard03
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 26.12.2006 (Вт) 0:38

Не корректно пашет

Сообщение hard03 » 27.12.2006 (Ср) 12:58

Вот такое получилось
Option Explicit
Private Sub Buttom_Click()
Dim str As String
str = Text.Text

Dim strArray As Variant
' Создаем строковый массив из строки
strArray = Split(str)
Dim ser As String
Dim i As Integer
' Проверяем условие от 2 до 10
If UBound(strArray) >= 2 And UBound(strArray) <= 10 Then
For i = 0 To UBound(strArray)
ser = strArray(i)
Call Forma.Find(ser, str)
Next i
Label.Caption = str
Call Forma.Sort(strArray)
Else
Label.Caption = "Неверный диапазон срок !"
End If
End Sub
Public Sub Find(ByRef ser, ByRef str)
' Ищем в строке слово полученное из массива и заменяем на преобразованное
str = Replace(str, ser, Alf(ser))
End Sub
Public Function Alf(ByVal ser)
Dim ito_eto As String
Dim check As Boolean
check = True
Dim A As String * 1
Dim b As String * 1
A = Mid(ser, 1, 1)
Dim j As Integer
' Запускаем цикл для проверки наличия в слове русских и английских символов
' Если таковые есть, то - check = False
For j = 2 To Len(ser)
b = Mid(ser, j, 1)
If Values(A) <> Values(b) Then
check = False
Exit For
End If
Next j
If check = True Then
If 65 <= Asc(A) And Asc(A) <= 90 Or 97 <= Asc(A) And Asc(A) <= 122 Then
' Переводим первую букву (англиского слова) в верхний регистр
Alf = UCase(A) + Right(ser, Len(ser) - 1)
End If
If 128 <= Asc(A) And Asc(A) <= 175 Or 224 <= Asc(A) And Asc(A) <= 243 Then
' Переводим первую букву (русского слова) в нижний регистр
Alf = LCase(ser)
End If
Else
Dim g As Integer
' Переводим регистры русских и английских символов в нужный регистр
For g = 1 To Len(ser)
b = Mid(ser, g, 1)
If 65 <= Asc(b) And Asc(b) <= 90 Or 97 <= Asc(b) And Asc(b) <= 122 Then
ito_eto = ito_eto + UCase(b)
End If
If 128 <= Asc(b) And Asc(b) <= 175 Or 224 <= Asc(b) And Asc(b) <= 243 Then
ito_eto = ito_eto + LCase(b)
End If
Next g
Alf = ito_eto
End If
End Function
Public Function Values(ch)
Dim check As Boolean
' Проверяем все символы
If 65 <= Asc(ch) And Asc(ch) <= 90 Or 97 <= Asc(ch) And Asc(ch) <= 122 Then
check = True
End If
If 128 <= Asc(ch) And Asc(ch) <= 175 Or 224 <= Asc(ch) And Asc(ch) <= 243 Then
check = False
End If
Values = check
End Function
Public Sub Sort(ByRef strArray)
Dim i As Integer
Dim j As Integer
Dim n As String
' Изменяем размерность сортированной части массива
For i = 0 To UBound(strArray) - 1
' Сравниваем поочередно i - тый лемент несортированной части массива со всеми i +1 до конца
For j = i + 1 To UBound(strArray)
' Если элемент больше, чем i меняем местами
If StrComp(strArray(i), strArray(j)) = -1 Then
n = strArray(i)
strArray(i) = strArray(j)
strArray(j) = n
End If
Next j
Next i
Label1.Caption = Join(strArray, " ")
End Sub

Private Sub Text_Change()

End Sub

Только, где-то теряется преобразованный массив и происходит обращение к исходному тексту при сортировке. Не пойму в чем трабл? Может что-то с пространством имен?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.12.2006 (Ср) 15:06

Если автор соизволит применить теги форматирования к приведенному коду, то получит ответы.
Весь мир матрица, а мы в нем потоки байтов!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 12:01

Ну твое счастье что Новый Год скоро.
Смотри приложенный проект...
Вложения
Z.RAR
(2.23 Кб) Скачиваний: 84
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 02.01.2007 (Вт) 2:27

где кнопка Вход на этом форуме? приходится новое левое сообщение печатать, чтобы скачать приложение, рррррррррр

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.01.2007 (Вт) 2:38

Она внизу главной страницы.
Изображение


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList