Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2014, 08:24   #1
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию Найти количества слов в строке

Здравствуйте. Как найти число слов в строке string, при условии что слова могут разделяться несколькими пробелами?
Nickolay0512 вне форума Ответить с цитированием
Старый 11.10.2014, 09:55   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

посчитать кол-во пар символов <пробел+непробел>, добавить 1, если строка не начинается с пробела.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 10:41   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Как найти число слов в строке string, при условии что слова могут разделяться несколькими пробелами?

Код:
std::string text = "...";

std::stringstream ss(text);
std::string word;

size_t words = 0;
while (ss >> word)
    words++;
Rififi вне форума Ответить с цитированием
Старый 11.10.2014, 18:22   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Промежуточный итог темы:

Подсчёт слов в тексте с помощью std::stringstream

Автор: Rififi

Код:
#include <string>
#include <sstream>
#include <iostream>

size_t countWords( const std::string &text );

int main()
{
    const std::string text = "Hello    my   computer!\n"
                             "Hello, World!";

    size_t n = countWords( text );
    std::cout << "text = " << text << std::endl;
    std::cout << "n = " << n << std::endl;

    return 0;
}

size_t countWords( const std::string &text )
{
    std::stringstream ss( text );
    std::string word;

    size_t n = 0;
    while( ss >> word ) {
        n++;
    }

    return n;
}
Подсчёт слов в тексте с помощью std::istream_iterator

Автор: DiffEreD

Тема: http://www.cyberforum.ru/cpp-beginne...ad1273215.html

Код:
#include <string>
#include <iterator>
#include <vector>
#include <sstream>
#include <iostream>

size_t countWords( const std::string &text );

int main( )
{
    const std::string text = "Hello    my   computer!\n"
            "Hello, World!";

    size_t n = countWords( text );
    std::cout << text << std::endl;
    std::cout << "n = " << n << std::endl;

    return 0;
}

size_t countWords( const std::string &text )
{
    std::istringstream iss( text );

    size_t n = std::vector<std::string> { std::istream_iterator<std::string>( iss ),
        std::istream_iterator<std::string>( ) }
    .size( );

    return n;
}
Подсчёт слов в тексте с помощью std::sregex_iterator

Автор: 8Observer8

Код:
#include <regex>
#include <string>
#include <iostream>

size_t countWords( const std::string &str );

int main( )
{
    const std::string text = "Hello    my   computer!\n"
            "Hello, World!";

    size_t n = 0;
    try {
        n = countWords( text );
    } catch ( const std::regex_error &e ) {
        std::cerr << "Error: incorrect regular expression" << std::endl;
        return 1;
    }

    std::cout << text << std::endl;
    std::cout << "n = " << n << std::endl;

    return 0;
}

size_t countWords( const std::string &text )
{
    std::smatch sm;
    size_t n = 0;

    try {
        const std::regex e( "\\b\\w+\\b" );
        std::sregex_iterator next( text.begin( ), text.end( ), e );
        std::sregex_iterator end;
        while ( next != end ) {
            next++;
            n++;
        }
    } catch ( const std::regex_error &e ) {
        throw;
    }

    return n;
}
Подсчёт слов в тексте с помощью sregex_token_iterator

Автор: sergestus

Тема: http://www.cyberforum.ru/cpp-beginne...ad1273215.html

Код:
#include <iostream>
#include <regex>
#include <string>

using namespace std;

int main( )
{
    string inputString =
            "Humpty Dumpty sat on a wall,\n"
            "Humpty Dumpty had a great fall.\n"
            "All the king's horses and all the king's men\n"
            "Couldn't put Humpty together again.\n";

    // Регулярное выражение (шаблон) для поиска слова в строке
    regex expression( "([^\\s]+)" );

    // Для перебора слов в строке используются итераторы (указатели): 
    // first - итератор первого слова
    // last - итератор последнего слова 
    sregex_token_iterator first( inputString.begin( ), inputString.end( ), expression );
    sregex_token_iterator last;

    // Выводим исходную строку:
    cout << inputString << endl << endl;

    // Для поиска количества слов используем метод distance -
    // количество слов между первым и последним словом
    cout << "The count of words: " << distance( first, last ) << endl;

    system( "pause" );
    return 0;
}
Подсчёт слов в тексте с помощью QRegExp

Автор: 8Observer8

Код:
#include <string>
#include <iostream>
#include <QRegExp>

int countWords( const std::string &text );

int main( )
{
    const std::string text = "Hello    my   computer!\n"
            "Hello, World!";

    int n = countWords( text );
    std::cout << "text = " << text << std::endl;
    std::cout << "n = " << n << std::endl;

    return 0;
}

int countWords( const std::string &text )
{
    QRegExp re( "\\b\\w+\\b" );

    int count = 0;
    int pos = 0;
    while ( ( pos = re.indexIn( QString( text.c_str( ) ), pos ) ) != -1 ) {
        count++;
        pos += re.matchedLength( );
    }

    return count;
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи по паскалю: в строке, состоящей из слов подсчитать количество слов на заданный символ; нарисовать пирамидку Sasha_KS Паскаль, Turbo Pascal, PascalABC.NET 1 18.03.2014 22:00
Сравнение кол-ва слов в строке и сопоставление аналогичной строке. kish_mish Общие вопросы C/C++ 0 12.03.2012 20:58
Ввести с клавиатуры строку. Посчитать количество слов в строке. Определить, что является разделителем слов. Вывести рез-ть на экра Газимов Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 02.03.2012 15:58
Подсчет количества слов Driver_09 Помощь студентам 2 24.10.2010 17:14
Определение количества одинаковых слов в строке. brainy_man Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.05.2010 02:58