Определение того, сколько раз встречается подстрока в строке в Python
Я пытаюсь выяснить, сколько раз строка встречается в строке. Например:
Скажем, строка, которую я хочу найти, это 123. Очевидно, что в nStr это происходит дважды, но у меня возникают проблемы с реализацией этой логики в Python. Что я получил на данный момент:
Ответ, который он должен вернуть, — 2. Я сейчас застрял в бесконечном цикле.
Я только что узнал, что считать это гораздо лучший способ сделать это, но из любопытства, кто-нибудь видит способ сделать это похоже на то, что я уже получил?
Напишите программу которая определяет сколько раз встречается подстрока в символьной строке
Профиль
Группа: Участник
Сообщений: 17
Регистрация: 31.1.2007
Репутация: нет
Всего: нет
Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск
Репутация: 32
Всего: 61
| Код |
| //————————————————————————— #include <string.h> #include <stdio.h> //————————————————————————— #define MAX 100 //————————————————————————— int main(int argc, char* argv[]) < char s[MAX]; char substr[MAX]; int n = 0; // кол-во вхождений char* temp; |
Профиль
Группа: Участник
Сообщений: 17
Регистрация: 31.1.2007
Репутация: нет
Всего: нет
Это сообщение отредактировал(а) mutante — 10.4.2007, 20:59
Профиль
Группа: Участник
Сообщений: 17
Регистрация: 31.1.2007
Репутация: нет
Всего: нет
Профиль
Группа: Завсегдатай
Сообщений: 1718
Регистрация: 10.5.2003
Где: Эрец-Исраэль
Репутация: 50
Всего: 88
Можно я попробую? Спасибо.
| Код |
| #include <string.h> #include <stdio.h> |
#define MAX 100 // размер массива
int main(int argc, char* argv[])
<
char s[MAX]; // строка для поиска
char substr[MAX]; // искомая подстрока
int n = 0; // счётчик вхождений подстроки
char* temp = s; // устанавливаем указатель на начало строки
puts("Input str"); // приглашение для ввода строки
gets(s); // вводим строку
puts("Input substr"); // приглашение для ввода подстроки
gets(substr); // вводим подстроку
// в цикле ищем вхождения подстроки до тех пор, пока
// ф-ция strstr не вернёт NULL — значит искать больше нечего
while((temp = strstr(temp, substr)) != NULL)
<
// а если нашли то.
n++; // . увеличиваем счётчик вхождений подстроки.
temp++; // . сдвигаем указатель на следующий символ для того,
// что бы ф-ция strstr начала новый поиск
>
printf("N = %d", n); // печатаем количество вхождений
getchar(); // ждём нажатия любой клавиши
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.4.2007
Репутация: нет
Всего: нет
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!
- Название темы должно отражать её суть! (Не следует добавлять туда слова «помогите», «срочно» и т.п.)
- При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
- В названии темы не нужно указывать происхождение задачи (например «школьная задача», «задача из учебника» и т.п.), не нужно указывать ее сложность («простая задача», «легкий вопрос» и т.п.). Все это можно писать в тексте самой задачи.
- Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
- Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку «Код»). Не забывайте выбирать при этом соответствующий язык.
- Помните: один топик — один вопрос!
- В данном разделе запрещено поднимать темы , т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
- Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
- Если вопрос решён, то воспользуйтесь ссылкой «Пометить как решённый», которая находится под кнопками создания темы или специальным флажком при ответе.
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
[ Время генерации скрипта: 0.1146 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Сколько раз буква встречается в строке
Программа принимает на вход строку и букву. Надо определить (с использованием рекурсии), сколько раз данная буква встречается в строке.
Решение задачи
- Принимаем на вход строку и букву, записываем их в разные переменные.
- Передаем эти переменные в качестве аргументов в рекурсивную функцию.
- В качестве базы рекурсии примем условие, что строка является непустой.
- Если строка является непустой, то работа функции продолжается и мы смотрим, совпадает ли первый символ строки с проверяемой буквой, или нет. Если совпадает, то мы увеличиваем счетчик на единицу.
- Далее мы передаем строку без первой буквы снова в функцию, и все повторяется заново.
- Когда строка станет пустой, функция вернет нам количество вхождений буквы в строке. Выведем этот результат на экран.
- Конец.
Исходный код
Ниже дан исходный код программы для рекурсивного определения количества вхождений буквы в строку. Результаты работы программы также даны ниже.
Объяснение работы программы
- Пользователь вводит строку и букву, которые записываются в отдельные переменные string и ch .
- Далее эти переменные передаются в качестве аргументов в рекурсивную функцию check() .
- Для того чтобы функция продолжала свою работу, необходимо, чтобы строка была непустой. Если строка является пустой, функция завершает свою работу и возвращает 0 .
- На следующем шаге рекурсивная функция проверяет, совпадает ли буква в переменной ch с первой буквой в строке. Если совпадает, то в выходное значение добавляется 1 , к которой прибавляется функция check() , в которой в качестве аргумента передается наша строка, но уже без первой буквы. Если нет, то просто вызывается функция check() , где в качестве аргумента также строка без первой буквы.
- Так повторяется до тех пор, пока строка не станет пустой.
- После этого результат выводится на экран.
Результаты работы программы

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