Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787

Выделить вещественное число из строки

27.02.2015, 13:08. Показов 3315. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!!Пожалуйста помогите разобраться.Дана строка,содержащая слова,разные символы, вещественные и целые числа.Нужно получить сумму чисел.Во какой огород получился.Работает,но если встречается число с 0 до точки не работает (0.5)
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
27
28
29
30
31
32
33
Option Explicit
 
Dim stroka() As String
Dim n As Integer, s As String
Dim sum As Single, kol As Integer, i As Integer
 
Private Sub Form_Click()
List1.Clear
s = InputBox("Введите строку")
List1.AddItem (s) 'записал в List
s = Strings.Trim(s) 'Удалим лишний пробел
Do Until Strings.InStr(s, "  ") = 0 'пока не будет вхождений
    s = Strings.Replace(s, "  ", " ") '
Loop
stroka = Strings.Split(s) 'записываем в массив
n = UBound(stroka)
sum = 0
kol = 0
For i = 0 To n
'если число считаем сумму
    If Strings.Trim(Str(Val(stroka(i)))) = stroka(i) Then
        sum = sum + Val(stroka(i))
        kol = kol + 1 ' считаем количество чисел
    End If
Next
List1.AddItem ("------------------------------------")
If kol = 0 Then
    List1.AddItem ("В строке нет чисел")
Else
    List1.AddItem ("Сумма =" & Str(sum))
End If
 
End Sub
Что я не так делаю?Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2015, 13:08
Ответы с готовыми решениями:

Из строки выделить подстроку, задающую вещественное число с плавающей точкой
Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделитьподстроку, задающуювещественноечислосплавающейточкой...

Из строки выделить подстроку, задающую вещественное число с плавающей точкой
Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с плавающей точкой. ...

Выделить подстроку, задающую вещественное число с фиксированной точкой
Задание: Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с...

6
 Аватар для Апострофф
9908 / 3928 / 742
Регистрация: 11.10.2011
Сообщений: 5,908
27.02.2015, 13:29
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
27
28
29
30
31
32
33
34
35
36
Option Explicit
 
Dim stroka() As String
Dim n As Integer, s As String
Dim sum As Single, kol As Integer, i As Integer
 
Private Sub Form_Click()
List1.Clear
s = InputBox("Введите строку")
List1.AddItem (s) 'записал в List
s = Strings.Trim(s) 'Удалим лишний пробел
Do Until Strings.InStr(s, "  ") = 0 'пока не будет вхождений
    s = Strings.Replace(s, "  ", " ") '
Loop
 
s = Replace(s, ".", ",")
 
stroka = Strings.Split(s) 'записываем в массив
n = UBound(stroka)
sum = 0
kol = 0
For i = 0 To n
'если число считаем сумму
  If IsNumeric(stroka(i)) Then
        sum = sum + CDbl(stroka(i))
        kol = kol + 1 ' считаем количество чисел
    End If
Next
List1.AddItem ("------------------------------------")
If kol = 0 Then
    List1.AddItem ("В строке нет чисел")
Else
    List1.AddItem ("Сумма =" & Str(sum))
End If
 
End Sub
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
27.02.2015, 13:49
Цитата Сообщение от Genn55 Посмотреть сообщение
Работает,но если встречается число с 0 до точки не работает (0.5)
Тест в окне Immediate
Code
1
2
3
4
?str(0.3)
 .3
?str(-0.3)
-.3
Т.е. Str опускает 0 в этом случае.

Добавлено через 19 минут
Ленивым методом
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
27
28
29
30
31
32
33
Option Explicit
 
Dim stroka() As String
Dim n As Integer, s As String
Dim sum As Single, kol As Integer, i As Integer
 
Private Sub Form_Click()
Dim x, w
Static re As Object
If re Is Nothing Then
  Set re = CreateObject("vbscript.regexp")
  re.Pattern = "[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?" 'http://www.regular-expressions.info/floatingpoint.html
  re.Global = True
End If
 
List1.Clear
s = InputBox("Введите строку")
List1.AddItem (s) 'записал в List
 
Set w = re.execute(s)
sum = 0
kol = w.Count
For Each x In w
    sum = sum + Val(x)
Next
List1.AddItem ("------------------------------------")
If kol = 0 Then
    List1.AddItem ("В строке нет чисел")
Else
    List1.AddItem ("Сумма =" & Str(sum))
End If
 
End Sub
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
27.02.2015, 14:33
Genn55, а почему нельзя после разбиения на слова просто к каждому слову тупо применить VAL и сложить результаты? Если на вход VAL подается не число, результат будет=0, так что сумма не изменится.
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
27.02.2015, 17:09  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Genn55, а почему нельзя после разбиения на слова просто к каждому слову тупо применить VAL и сложить результаты? Если на вход VAL подается не число, результат будет=0, так что сумма не изменится.
Это первое о чем я подумал и в данном примере согласен на все 100,но есть и умножение.
Апострофф спасибо большое,я понял свою ошибку.......столько промучился)))))
Казанский в VB6 я полный чайник.Если вас не очень затруднит, раскомментировать этот фрагмент
Visual Basic
1
2
3
4
5
6
7
Dim x, w
Static re As Object
If re Is Nothing Then
  Set re = CreateObject("vbscript.regexp")
  re.Pattern = "[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?" 
  re.Global = True
End If
буду премного благодарен.По ссылке просмотрел пока не очень понял.
Всем огромное спасибо!
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
27.02.2015, 17:26
Лучший ответ Сообщение было отмечено Genn55 как решение

Решение

Genn55, про регулярные выражения применительно в VB/VBS/VBA: http://www.script-coding.com/WSH/RegExp.html
1
18 / 9 / 4
Регистрация: 04.02.2015
Сообщений: 36
01.03.2015, 18:41
Цитата Сообщение от Genn55 Посмотреть сообщение
If Strings.Trim(Str(Val(stroka(i)))) = stroka(i) Then
sum = sum + Val(stroka(i))
kol = kol + 1 ' считаем количество чисел
End If
Можно здесь поставить вместо Str функцию cStr
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2015, 18:41
Помогаю со студенческими работами здесь

В строке выделить подстроку, задающую вещественное число с фиксированной точкой
Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с фиксированной точкой.

Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное
ооочень нужна помощь, задание даже понять особо не могу. нужно из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить...

Преобразование строки в вещественное число
Здравствуйте! На вход, программа получает вещественное значение в строку Buffer; Необходимо преобразовать эту строку в число типа dd. ...

Вещественное число в виде строки
Здравствуйте. Существует замечательная функция atof(). Есть ли обратная этой функции, т.е. которая вещ. число переводит в строку.

Проверка строки на вещественное число
Все готово, теперь нужно куда-нибудь запихнуть условие, если число будет не только вещественным, но и отрицательным. Подскажите куда его...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru