Подсчитать общие вхождение символов #.@,$в тексте

Если сильно выпендриться, то можно так:

#include <iostream>
#include <string>
#include <regex>

std::string s("Помогите решить .подсчитать общие вхождение символов #.@,$в тексте "
"Форумы "
"C / C++ "
"Помогите решить.подсчитать общие вхождение символов #.@, $в тексте "
"konderson "
"10.01.2015 "
"помогите решить.подсчитать общие вхождение символов #.@, $в тексте ");


int main()
{
    setlocale(LC_ALL, "Russian");

    std::regex e("([#.@,$])");

    std::smatch m;

    int counter = 0;
    while (std::regex_search(s, m, e))
    {
        ++counter;
        //std::cout << counter << ": [" << m.suffix().str() << "]" << " -> [" << m.str() << "]" << std::endl;
        s = m.suffix().str();
    }

    std::cout << "Найдено вхождений " << counter << std::endl;

    return 0;
}

Детали см. здесь. Закомментированная строка — тестовая печать.

А если делать по старинке, то помещаем текст в буфер, настраиваем указатель на начало буфера. Потом в цикле гоним указатель по буферу (до нулевого символа) и проверяем каждый символ на соответствие искомым. В случае удачи — увеличиваем счетчик.

Соответствие можно проверять либо банальным if, т.к. альтернатив тут не много, либо сделать отдельную функцию для проверки. Что-то типа

bool match(const char *str, char c) {
    const char *p = str;

    while (*p) {
        if (*p == c)
            return true;
        p++;
    }
    return false;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.