Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
#1

Проверка возможности составить слово из другой строки - Visual Basic .NET

21.03.2017, 22:55. Просмотров 329. Ответов 9
Метки нет (Все метки)

Добрый вечер.
Помогите пожалуйста решить задачу:
Нужно проверить возможность составить слово из символов другой строки, причем нужно ещё учитывать количество повторений слов.
Как вообще проверить можно ли составить слово я понимаю, но как ещё и учитывать возможность повторений в нужном слове большего количества символов, чем в исходном я не могу понять.

Вот как просто проверить слово:
vb.net
1
2
3
4
5
6
7
8
9
10
Dim intC1, intC2 As Integer
        Dim chrX As Char
        For intC1 = 1 To Len(strText)
            chrX = GetChar(strText, intC1)
            For intC2 = 1 To Len(strBase)
                If GetChar(strBase, intC2) = chrX Then
                    Exit For
                End If
            Next
            If intC2 > Len(strBase) Then False
А как учитывать возможность повторения символов в базовой строке?

Я думал перед первым циклом сделать ещё цикл для нахождения в искомом слове повторяющихся букв, и принять тогда как True, а потом сравнить. Но думаю это не правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2017, 22:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка возможности составить слово из другой строки (Visual Basic .NET):

Проверить, можно ли составить строку, используя символы другой строки
Добрый вечер! Просьба помочь написать функцию проверяющую можно ли составить строку, используя только символы другой строки. Без...

Проверка возможности представления строки как даты
Добрый вечер. Возник такой вопрос. Есть БД access, в которой есть поле типа 'дата'. Можно ли в delphi перед выводом этой таблицы...

Проверка строки на слово
Смотрите, есть строка допустим "Hello Hello World Hello Hello" и в ней нужно найти слово World и если есть такое слово, то вывести его в...

Проверка содержимого строки на вхождение другой
Доброе время суток! Меня интересует следующее, возможноли проверить с помощью VBScript содержит ли одна строка, другую? Зараниэ...

Проверка наличия символов одной строки в другой Ансистринг
for(int i=1; i<=alfa.Length()+1;i++) for(int j=1; j<=s.Length(); j++) {if (s.Pos(AnsiString(alfa))==0)...

Составить слово из символов строки
Дана строка. Написать программу, выводящую на экран строку, составленную из первого, второго и последнего символов исходной строки.

9
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
22.03.2017, 00:53 #2
Посмотрите
http://www.cyberforum.ru/visual-basic/thread1152269.html
1
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
22.03.2017, 11:15  [ТС] #3
Спасибо.
Честно не совсем понял как в той теме получили результат. Да и с функцией Replace неясно. Что она делает. Других способов нет? Через цикл или if?
0
MrCrown
766 / 752 / 176
Регистрация: 03.10.2012
Сообщений: 768
22.03.2017, 13:38 #4
Если я правильно понял задачу
vb.net
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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim s As String = "Съешь же ещё этих мягких французских булок да выпей чаю"
        Dim ss As String = "смирнофф"
        If CheckStr(s, ss) Then
            MsgBox("Можно")
        Else
            MsgBox("Нельзя")
        End If
        
    End Sub
    Private Function CheckStr(ByVal src As String, ByVal targ As String) As Boolean
        Dim arrSrc As New List(Of Char)(src.ToCharArray)
        Dim arrTarg() As Char = targ
        Dim n As Integer = 0
 
        For Each el In arrTarg
            If arrSrc.Contains(el) Then 'Содержится ли символ в проверяемой строке
                n += 1
                arrSrc.Remove(el) 'Удаляем символ из исходного массива
            End If
        Next
        If n = targ.Count Then
            Return True
        End If
        Return False
    End Function
Добавлено через 21 минуту
Здесь смысл проверки на то, что в проверяемом слове могут оказаться одинаковые буквы заключается в том, что мы просто в ходе проверки удаляем из исходной строки (преобразованной в массив) встретившиеся буквы, а затем подсчитываем их количество. И если букв хватает для составления слова, возвращаем True.
1
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
22.03.2017, 16:18  [ТС] #5
MrCrown, да всё правильно получилось. Спасибо большое.
Нужно учитывать количество букв в исходной строке, как у Вас в примере.
А скажите, без массивов, Contains, Remove эту задачу можно решить, используя сравнения и циклы как у меня выше(из другой задачи проверки составления слова)?

Добавлено через 2 часа 10 минут
MrCrown, я понял смысл алгоритма. Но, как-то не могу понять синтаксис функции, как преобразовать в массив, и что это за цикл For. Я изучал цикл For с первого элемента массива/строки и до последнего. А у Вас мне пока не ясно.
Но, ещё раз спасибо.
0
Orlangur1991
1023 / 957 / 226
Регистрация: 28.11.2014
Сообщений: 1,464
22.03.2017, 16:42 #6
ViacheslavBel,
Цитата Сообщение от ViacheslavBel Посмотреть сообщение
как преобразовать в массив
vb.net
1
2
Dim arrSrc As New List(Of Char)(src.ToCharArray)
        Dim arrTarg() As Char = targ
Сначала берем переданную строку src и преобразуем её в List(of char), предварительно переведя в массив символов
затем вторую переданную строку targ так же переводим в массив символов

Цитата Сообщение от ViacheslavBel Посмотреть сообщение
и что это за цикл For
For Each
1
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
22.03.2017, 20:51 #7
Цитата Сообщение от ViacheslavBel Посмотреть сообщение
Да и с функцией Replace неясно. Что она делает.
Replace(string, find, replace[, start[, count[, compare]]])

Возвращает строку, полученную из исходной строки (string), в которой указанная подстрока (find) была заменена другой подстрокой (replace) указанное количество раз (count) начиная с позиции (start). Необязательный аргумент compare задает вид сравнения.

Mid(string, start[, length])

Возвращает часть строки (подстроку), содержащую указанное количество символов (length) начиная с позиции (start) слева направо.
Здесь вы найдете все,что вам нужно.
http://rguitp-pi.narod.ru/program/functions.htm
1
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
22.03.2017, 21:25  [ТС] #8
Спасибо за объяснение, буду читать об этом.
0
diadiavova
3645 / 1233 / 392
Регистрация: 11.04.2015
Сообщений: 2,307
Записей в блоге: 33
23.03.2017, 11:08 #9
Можно еще так, правда в работе не проверял
vb.net
1
2
3
    Function CheckStr(src As String, target As String) As Boolean
        Return target.Distinct().All(Function(c) src.Count(Function(cc) cc = c) >= target.Count(Function(cc) cc = c))
    End Function
2
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
23.03.2017, 12:30  [ТС] #10
Спасибо, посмотрю.
0
23.03.2017, 12:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 12:30
Привет! Вот еще темы с решениями:

Вывести строки из файла в другой файл, в которых содержится заданное слово
Есть документ с англ. текстом. Пользователь вводит слово, и мы должны записать в другой файл только те строки, в которых содержится наше...

Записать в другой файл только те строки, в которых содержится ключевое слово
1) Написать программу, считывающую файл и записывающую в другой файл, только те строки, в которых содержится ключевое слово, которое нужно...

Выделить в строке второе слово и поместить его в конец другой строки
Составить подпрограмму, которая выделяет в строке второе слово и помешает его в конец другой строки. Если такого слова нет, то вывести...

Перенести из одного файла все строки, содержащие конкретное слово в другой
Суть в том,чтобы создать 2 файла "file1" и "file2", в "file1" написан какой то текст,"file2" пустой, нужно из первого файла перенести все...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru