С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
1

Число вхождений подстроки и каждого из символов подстроки в текст

27.12.2018, 11:05. Показов 11142. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, товарищи. Подскажите пожалуйста. Осваиваю VS 2013 и С# в целом. Имеется приложение с двумя TextBox'ами необходимо найти по нажатию кнопки: число вхождений подстроки в текст, число вхождений каждого из символов подстроки в текст. По каждому из пунктов нашел информацию. Проблема заключается именно реализации в Visual Studio.
Число вхождений подстроки в текст, подскажите как брать информацию именно с Textbox'ов(в которые вводит данные пользователь или копирует):
C#
1
2
3
4
5
private int CountWords(string s, string s0)
{
    int count = (s.Length - s.Replace(s0, "").Length) / s0.Length;
    return count;
}
Число вхождений каждого из символов подстроки в текст:
C#
1
int count = test.Split('').Length - 1;
Добавлено через 11 часов 3 минуты
Во втором случае, данные тоже необходимо данные брать с Textbox'ов
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2018, 11:05
Ответы с готовыми решениями:

В строке символов заменить все вхождения подстроки p на не более чем n символов подстроки q
Составить функцию Zam(s,p,q,n), которая в строке символов s заменяет все вхождения подстроки p на...

Подсчета количества вхождений подстроки в произвольный текст
Программа подсчета вхождения подстроки в произвольном тексте.

Определить число вхождений подстроки в строку
Не нашел того что мне нужно, поэтому задам вопрос. Входные данные: длина строки сама строка...

Определить число вхождений в строку подстроки
Дана строка символов. Определить число вхождений в строку подстроки abc. Каждое вхождение заменить...

31
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
27.12.2018, 11:34 2
Строку из текстбокса добывают так:
C#
1
2
3
string s, s0;
 s = textBox1.Text;
 s0 = textBox2.Text;
вместо textBox1 и textBox2 нужно подставить свойство Name каждого текстбокса.

Добавлено через 11 минут
Цитата Сообщение от keen_qd Посмотреть сообщение
Число вхождений каждого из символов подстроки в текст:
C#
1
int count = test.Split('').Length - 1;
Добавлено через 11 часов 3 минуты
Во втором случае, данные тоже необходимо данные брать с Textbox'ов
Второй ваш метод не понял.
А первый мне понравился
1
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
27.12.2018, 11:40  [ТС] 3
Да, тут именно для нахождения определенного символа в строке, а вот как найти количество вхождений каждого из символов подстроки(s0) в текст s, что-то не пойму
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
27.12.2018, 12:03 4
Цитата Сообщение от keen_qd Посмотреть сообщение
как найти количество вхождений каждого из символов подстроки(s0) в текст s, что-то не пойму
В лоб решил бы эту задачу так:
1. Перенес бы подстроку посимвольно в массив (char[] array = s.ToCharArray()
2. В цикле For от 0 до (array.Length-1) искать номер элемента в строке (IndexOf(array[i], ОткудаНачатьПоиск)). ОткудаНачатьПоиск - переменная определяет с какого символа начинается поиск.
3. Если IndexOf(array[i]) != -1, значит символ найден в строке => счетчик += 1.
4. На следующем шаге увеличиваем ОткудаНачатьПоиск = предыдущее значение IndexOf.
и так далее.
Если не справитесь - дайте знать. Помогу
1
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
27.12.2018, 18:03  [ТС] 5
Нашел похожую тему, это ведь и есть нахождение именно каждого из символов подстроки в строке?
Определить количество вхождений строки S2 в строку S1

Добавлено через 2 минуты
Цитата Сообщение от Krapivnik Посмотреть сообщение
В лоб решил бы эту задачу так:
1. Перенес бы подстроку посимвольно в массив (char[] array = s.ToCharArray()
2. В цикле For от 0 до (array.Length-1) искать номер элемента в строке (IndexOf(array[i], ОткудаНачатьПоиск)). ОткудаНачатьПоиск - переменная определяет с какого символа начинается поиск.
3. Если IndexOf(array[i]) != -1, значит символ найден в строке => счетчик += 1.
4. На следующем шаге увеличиваем ОткудаНачатьПоиск = предыдущее значение IndexOf.
и так далее.
Если не справитесь - дайте знать. Помогу
Я просто запутался немного уже, не получается тот результат , что нужен. если Вас не затруднит напишите подробнее
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 07:02  [ТС] 6
Такое решение подойдет для моего случая?
C#
1
2
3
4
5
6
7
8
9
10
11
12
                ArrayList m = new ArrayList();
                string temp = s;
                int i = temp.IndexOf(s0), count_kol = 0;
                while (i != -1)
                {
                    m.Add(i + count_kol);
                    temp = temp.Substring(i + s0.Length);
                    count_kol += i + s0.Length;
                    i = temp.IndexOf(s0);
                }
                {
                    foreach (int pos in m)
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 07:25 7
Лучший ответ Сообщение было отмечено keen_qd как решение

Решение

Цитата Сообщение от keen_qd Посмотреть сообщение
если Вас не затруднит напишите подробнее
C#
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
string s, s0;
            int count = 0;
            int beginPos = 0;
            bool wasAnyFound = false;
            s = "строка, в которой ищем вхождения символов";
            s0 = "строка, символы которой ищем в строке s";
            char[] array_s0 = s0.ToCharArray(); //переносим строку в массив символов
            Array.Sort(array_s0); //сортируем массив символов, чтобы в дальнейшем не искать повторяющиеся в s0 символы
            for (int i = 0; i < s0.Length; i++)
            {
                if (i == 0 || array_s0[i] != array_s0[i - 1]) //проверка на то, что повторно не ищем повторы
                {
                    while (s.IndexOf(array_s0[i], beginPos) > 0)//выполняется пока есть символы в строке. После каждого успешного нахождения позиция поиска сдвигается
                    {
                        count += 1; //увеличиваем счетчик при нахождении
                        beginPos = s.IndexOf(array_s0[i], beginPos) + 1; //меняем в бОльшую сторону позицию элемента, с которого начинаем поиск в следующий раз
                    }
                    if (count > 0)
                    {
                        Console.WriteLine($"В строке '{s}' найдено символов '{array_s0[i]}': {count} шт.");
                        wasAnyFound = true;
                        count = 0;
                        beginPos = 0;
                    }
                }
            }
            if (wasAnyFound == false)
                Console.WriteLine($"В строке '{s}' не было найдено ни одного символа из строки '{s0}'");
 
            Console.ReadLine();
1
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 07:28  [ТС] 8
Спасибо большое!
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 07:29 9
Цитата Сообщение от keen_qd Посмотреть сообщение
Такое решение подойдет для моего случая?
Непонятно. Вы в блокноте, что ли код набиваете.
Разве не ведите, что у IDE (Visual Studio?) ругается на ваш код. Матерится даже, наверное
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 07:52  [ТС] 10
Цитата Сообщение от Krapivnik Посмотреть сообщение
Непонятно. Вы в блокноте, что ли код набиваете.
Разве не ведите, что у IDE (Visual Studio?) ругается на ваш код. Матерится даже, наверное
Да не матерится вроде) Работает, но находит возможно не то

Добавлено через 6 минут
Выводить значение в моем случае (в label) , которое считает кол-во вхождений это count я так понял?

Добавлено через 5 минут
У меня почему-то 0 выводит при любом раскладе...
C#
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
            int count_kol = 0;
            int beginPos = 0;
            bool wasAnyFound = false;
            s = "";
            s0 = "";
            char[] array_s0 = s0.ToCharArray(); //переносим строку в массив символов
            Array.Sort(array_s0); //сортируем массив символов, чтобы в дальнейшем не искать повторяющиеся в s0 символы
            for (int i = 0; i < s0.Length; i++)
            {
                if (i == 0 || array_s0[i] != array_s0[i - 1]) //проверка на то, что повторно не ищем повторы
                {
                    while (s.IndexOf(array_s0[i], beginPos) > 0)//выполняется пока есть символы в строке. После каждого успешного нахождения позиция поиска сдвигается
                    {
                        count_kol += 1; //увеличиваем счетчик при нахождении
                        beginPos = s.IndexOf(array_s0[i], beginPos) + 1; //меняем в бОльшую сторону позицию элемента, с которого начинаем поиск в следующий раз
                    }
                    if (count_kol > 0)
                    {
                        
                        wasAnyFound = true;
                        count_kol = 0;
                        beginPos = 0;
                    }
                }
            }
            if (wasAnyFound == false)
Добавлено через 7 минут
label7.Text = Convert.ToString(count_kol);
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 08:07 11
Счетчик count_kol обнуляется после каждой успешной итерации поиска. Поэтому ваш
Цитата Сообщение от keen_qd Посмотреть сообщение
C#
1
label7.Text = Convert.ToString(count_kol);
должен быть прописан там, где у меня была строка
C#
1
Console.WriteLine($"В строке '{s}' найдено символов '{array_s0[i]}': {count} шт.");
Причем, придумайте как сделать, чтобы текст метки не перезатирался каждый раз. Например, все результаты можно передавать в строку, и в конце (не в цикле) передать строку в label7.Text.
1
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 08:25  [ТС] 12
Цитата Сообщение от Krapivnik Посмотреть сообщение
Причем, придумайте как сделать, чтобы текст метки не перезатирался каждый раз. Например, все результаты можно передавать в строку, и в конце (не в цикле) передать строку в label7.Text.
Понял, надо подумать

Добавлено через 12 минут
Цитата Сообщение от Krapivnik Посмотреть сообщение
C#
1
if (wasAnyFound == false)
Извините еще за глупый вопрос, просто уже голова не варит, после вышеуказанного(как окончание цикла) ведь while (true) не подойдет?
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 08:29 13
Цитата Сообщение от keen_qd Посмотреть сообщение
после вышеуказанного(как окончание цикла) ведь while (true) не подойдет?
не понял вопрос
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 08:33  [ТС] 14
Цитата Сообщение от Krapivnik Посмотреть сообщение
C#
1
2
Console.WriteLine($"В строке '{s}' не было найдено ни одного символа из строки '{s0}'");
Console.ReadLine();
Ну, у Вас код завершается так, если в консоли реализовывать,после условия
C#
1
if (wasAnyFound == false)
что лучше прописать?
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 08:42 15
Цитата Сообщение от keen_qd Посмотреть сообщение
что лучше прописать?
Возможно сообщение вывести?
MessageBox.Show($"В строке '{s}' не было найдено ни одного символа из строки '{s0}'");
Ну и на ваше усмотрение может return добавить (если это необходимо)
1
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 08:50  [ТС] 16
C#
1
2
3
4
5
6
7
8
9
10
11
12
if (count_kol > 0)
                    {
                        label7.Text = Convert.ToString(count_kol);
                        wasAnyFound = true;
                        count_kol = 0;
                        beginPos = 0;
                    }
                }
            }
            if (wasAnyFound == false)
                
            return;
Я Вас наверное уже утомил, сделал как Вы подсказали, label пустой получается почему-то
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
28.12.2018, 08:53 17
Прикрепите решение целиком с заполненными текстбоксами (в zip-формате)
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 08:58  [ТС] 18
Скрин
Вложения
Тип файла: zip Снимок.zip (17.0 Кб, 5 просмотров)
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 09:09  [ТС] 19
проект
0
0 / 0 / 2
Регистрация: 13.06.2014
Сообщений: 80
28.12.2018, 09:10  [ТС] 20
Цитата Сообщение от Krapivnik Посмотреть сообщение
Прикрепите решение целиком с заполненными текстбоксами (в zip-формате)
сам проект
Вложения
Тип файла: zip WindowsFormsApplication1.zip (603 байт, 7 просмотров)
0
28.12.2018, 09:10
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2018, 09:10
Помогаю со студенческими работами здесь

определить число вхождений в строку подстроки abc.
дана строка символов, определить число вхождений в строку подстроки abc.

Для каждой строки подсчитать число вхождений подстроки “abc”
Добрый вечер! Кто поможет с задачей-буду очень благодарен! Ввести массив строк символов (текст),...

Даны подстрока, строка и число N. Удалить из строки N первых вхождений подстроки (Lazarus)
Помогите решить.Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов...

Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами
решить нужно в течении часа определить число вхождений в строку подстроки &quot;аба&quot; вывести...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru