Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
#1

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

21.03.2017, 22:55. Просмотров 284. Ответов 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):

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

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

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

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

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

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

9
Genn55
375 / 222 / 41
Регистрация: 26.12.2012
Сообщений: 733
22.03.2017, 00:53 #2
Посмотрите
Определить, можно ли из символов заданной строки составить вашу фамилию
1
ViacheslavBel
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 12
22.03.2017, 11:15  [ТС] #3
Спасибо.
Честно не совсем понял как в той теме получили результат. Да и с функцией Replace неясно. Что она делает. Других способов нет? Через цикл или if?
0
MrCrown
641 / 640 / 155
Регистрация: 03.10.2012
Сообщений: 661
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
783 / 717 / 163
Регистрация: 28.11.2014
Сообщений: 1,193
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
375 / 222 / 41
Регистрация: 26.12.2012
Сообщений: 733
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
1851 / 987 / 274
Регистрация: 11.04.2015
Сообщений: 1,832
Записей в блоге: 31
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
Привет! Вот еще темы с ответами:

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

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

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

Переписать текст в другой файл, поменяв местами первое слово каждой строки с последним - C++
Текстовый файл представляет собой совокупность строк, состоящих их слов, отделенных друг от друга пробелом. Переписать этот текст в другой...


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

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

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