Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1362
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1097
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 948
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1409
Дата выхода:19.10.2009, 09:30
Администратор рассылки:Dr_Andrew, Модератор
Подписчиков / экспертов:642 / 168
Вопросов / ответов:1 / 3
IRC-канал по теме:#C

Вопрос № 173263: Доброго времени суток, уважаемые эксперты! Помогите решить одну задачку: «Дана строка, содержащая пробелы. Найдите, сколько в нем слов Вход: На вход подается несколько строк. Входная строка должна считываться методом getline. Выход: количе...



Вопрос № 173263:

Доброго времени суток, уважаемые эксперты!
Помогите решить одну задачку: «Дана строка, содержащая пробелы. Найдите, сколько в нем слов
Вход: На вход подается несколько строк. Входная строка должна считываться методом getline.
Выход: количество слов в первой из введенных строк.»

Отправлен: 14.10.2009, 09:29
Вопрос задал: Kwant, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает Dr_Andrew, Модератор :
Здравствуйте, Kwant!
Это простейший вариант решения.
Число слов в строке будем считать равным числу пробелов, разделяющих слова, плюс 1 (предполагается, что после последнего слова в строке пробела нет).
Число пробелов считаем, передвигаясь по символам первой строки в функции CheckGaps, которая и возвращает число пробелов. В остальном см. приложение.
Вывод программы:

Введите первую строку: Ко мне на заре в сновиденье
Введите вторую строку: Пришла моя мать... Не гони её
Введите третью строку: Криком своим, кукушка!
Первая строка содержит 6 слов.

Приложение:

Ответ отправил: Dr_Andrew, Модератор
Ответ отправлен: 14.10.2009, 09:53
Казахстан, Алма-Ата
Организация: Казахский научный центр карантинных и зоонозных инфекций
Адрес сайта: Медицинские программы для Linux
ICQ # 256452186

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255401 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Micren, Бакалавр :
    Здравствуйте, Kwant.
    Программа. C++. MS VS 2008.

    Код:
    #include <iostream>
    #include <string>
    #include <locale>
    #include <algorithm>
    #include <functional>

    using namespace std;

    // Разделители слов. В данном случае пробел. Добавьте что считаете нужным.
    const wchar_t delimiters[]=L" ";

    // Подсчитывает кол. слов в строке
    size_t wordsCount(const wstring& str)
    {
    size_t count=0;
    // Индекс текущего символа
    wstring::size_type cur=0;
    // Ищем первый не разделитель и пока есть такие
    while((cur=str.find_first_not_of(delimiters,cur))!=wstring::npos)
    {
    // Инкрементируем счетчик
    ++count;
    // Ищем конец слова(разделитель)
    cur=str.find_first_of(d elimiters,cur);
    }
    return count;
    }

    // ---------------- Второй способ ---------------------------------------------------
    // Функтор, используемый ниже, для проверки символа на предмет является ли он разделителем
    class isDelimPred:public unary_function<wchar_t,bool>
    {
    public:
    result_type operator()(argument_type ch)const
    {
    #pragma warning(disable:4800)
    return iswspace(ch);
    }
    };

    // Вторая функция делающая то же самое только слегка по другому
    size_t wordsCount2(const wstring& str)
    {
    size_t count=0;
    wstring::const_iterator cur=str.begin(),end=str.end();
    while((cur=find_if(cur,end,not1(isDelimPred())))!=end)
    {
    ++count;
    cur=find_if(cur,end,isDelimPred());
    }
    return count;
    }
    // --------------------------------------------------------------------------------------


    int main()
    {
    locale::global(locale("russian_russia.866"));
    wcout<<L&qu ot;Введите строку:"<<endl;
    wstring str;
    getline(wcin,str);
    wcout<<L"Количество слов в строке:"<<wordsCount(str)<<endl;
    system("PAUSE");
    return 0;
    }

    Пример работы:
    Код:
    Введите строку:
    Сколько же здесь слов?
    Количество слов в строке:4


    В программе 2 функции:
    wordsCount() - подсчитывает количество слов в строке. Разделителями считаются символы входящие в строку delimiters.
    wordsCount2() - для учета разделителей использует ф-ю iswspace(). Т.е. разделителями считается не только пробел, но и любые whitespaces. Для этого реализован функтор. Если Вам это не надо можете смело удалить.

    Ответ отправил: Micren, Бакалавр
    Ответ отправлен: 14.10.2009, 10:47

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255403 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Лысков Игорь Витальевич, Модератор :
    Здравствуйте, Kwant.
    Если класс string не нужен, а работать с char[],
    то можно реализовать так, как в приложении.

    Приложение:

    -----
    Удачи!

    Ответ отправил: Лысков Игорь Витальевич, Модератор
    Ответ отправлен: 14.10.2009, 17:32
    Украина, Кировоград
    Тел.: +380957525051
    ICQ # 234137952
    Mail.ru-агент: igorlyskov@mail.ru
    Абонент Skype: igorlyskov

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255418 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное