Как я могу посчитать количество "_"
в строке, как "bla_bla_blabla_bla"
?
c++
string
pattern-matching
Андре де Бур
источник
источник
Ответы:
источник
std::count
типа возвратаiterator_traits<InputIt>::difference_type
, который для большинства стандартных контейнеровstd::ptrdiff_t
, а неstd::size_t
.псевдокод:
РЕДАКТИРОВАТЬ: C ++ пример кода:
Обратите внимание, что это код для использования вместе с
std::string
, если вы используетеchar*
, заменитьs.size()
наstrlen(s)
.Также обратите внимание: я могу понять, что вы хотите что-то «как можно меньше», но я бы посоветовал вам использовать это решение вместо этого. Как видите, вы можете использовать функцию для инкапсуляции кода для вас, чтобы вам не приходилось
for
каждый раз записывать цикл, а просто использовать егоcount_underscores("my_string_")
в оставшейся части кода. Использование передовых алгоритмов C ++ здесь, безусловно, возможно, но я думаю, что это излишне.источник
Старомодное решение с правильно названными переменными. Это дает коду некоторый дух.
Редактировать: около 8 лет спустя, глядя на этот ответ, мне стыдно, что я сделал это (хотя я оправдал это для себя как язвительный удар по вопросу с минимальными усилиями). Это токсично и не в порядке. Я не удаляю почту; Я добавляю это извинение, чтобы помочь изменить атмосферу в StackOverflow. Итак, ОП: Я извиняюсь и надеюсь, что вы выполнили свою домашнюю работу правильно, несмотря на мой троллинг, и такие ответы, как мои, не отговаривали вас от участия на сайте.
источник
источник
Вы называете это ... лямбда-версия ... :)
Вам нужно несколько включений ... Я оставляю вас в качестве упражнения ...
источник
Использование лямбда-функции для проверки того, что символ равен «_», будет увеличиваться только счетчик, в противном случае это недопустимый символ
источник
[]( char c ){if(c =='_') return true; }
вызывает неопределенное поведение, потому что вы не вернули значение во всех путях кодаСуществует несколько методов поиска в std :: string, но, вероятно, именно то, что вы ищете. Если вы имеете в виду строку в стиле C, то эквивалентом является strchr. Тем не менее, в любом случае вы также можете использовать цикл for и проверять каждый символ - по сути, эти два цикла заключаются в цикле.
Как только вы знаете, как найти следующий символ по заданной позиции, вы постоянно продвигаете свой поиск (т. Е. Используете цикл), считая на ходу.
источник
Подсчитать количество появлений символов в строке легко:
источник
Вы можете узнать вхождение '_' в исходной строке, используя строковые функции. Функция find () принимает 2 аргумента, первый - строка, вхождения которой мы хотим выяснить, а второй аргумент - начальную позицию. Цикл используется для поиска вхождения до конца строки источника.
пример:
источник
Я бы сделал так:
источник
Я бы сделал что-то подобное :)
источник
Пытаться
источник
источник