Форум программистов, компьютерный форум CyberForum.ru

Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как переделать на консоль? http://www.cyberforum.ru/cpp-beginners/thread854048.html
данная задача сделано в форме, нужно чтоб все тодже самое, считалось в консоли //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init)
C++ Вычисление дискриминанта Вроди простая программа но почему то работает некоректно не пойму в чем причина С++ #include "stdafx.h" #include <iostream> #include <string> #include <windows.h> #include <fstream> #include <math.h> using namespace std; bool Discrim () { http://www.cyberforum.ru/cpp-beginners/thread854043.html
Error: jump to case label C++
Здравствуйте. Не один раз встречался с такой ошибкой. Сам не знаю, что она означает, но выправлял я ее с помощью if вместо switch - case. Так вот: здесь уже так у меня не получиться так исправить. Поясните пожалуйста, что эта ошибка означает и как ее исправить. #include <iostream> #include <conio.h> #include <vector> #include <cstdlib> enum KEYS { SPACE = 32, ENTER = 13, BACKSPACE = 8 };...
Дерево результатов футбольных соревнований C++
Нужно сделать дерево результатов футбольных соревнований. В моем случае это футбол. Турнир должен выглядеть как Лига Чемпионов. Групповой этап, плей-офф и финал. Голы, которые забили команды, должны задаваться рандомно. Сделал плей-офф, но он не работает так как надо. Подскажите, каким образом лутше всего это реализовать? #include <iostream> using namespace std; class championleague {...
C++ Построить класс для управления базой данных колекции марок. Используйте следующие поля класса: http://www.cyberforum.ru/cpp-beginners/thread854025.html
Построить класс для управления базой данных колекции марок. Используйте следующие поля класса: char stamp_title; //название коллекции char country; // название страны марки int count_of_stamps; // количество марок этой страны int total_format; // формат(1-квадрат,2-треугольник,3-овал) Определите методы для ввода данных с клавиатуры, для вывода их на экран. Создайте несколько...
C++ Создайет класс служащие объектом которого будет Создайет класс Employee(служащие) объектом которого будет Age (возраст) и Salary(зарплата). Создайте объекты Ivanov и Petrov.Задайте значения членов-данных этих объектов и выведите их на печать подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.05.2013, 15:10     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово
Интересная задачка, вот мой вариант решения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <boost/algorithm/string.hpp>
 
int main()
{
    std::string s = "world okno opera adc conan stryna argentina akter";
    //std::getline(std::cin, s); //или ручной ввод
    
    std::vector<std::string> words;
    boost::split(words, s, boost::is_any_of(" ,:;!?"), boost::token_compress_on);
    
    std::cout<<"All words:\n";
    for (const auto& i : words) std::cout<<i<<" ";
    
    char letter = words[0].back();      //последняя буква первого слова
    std::vector<std::string> matches;   //совпавшие слова
    
    std::for_each(words.begin()+1, words.end(), [&letter, &matches](const std::string& s)
    {
        if (letter == s.front()) matches.push_back(s);  //ищем совпадения
        letter = s.back();
    });
    std::cout<<"\n\nMatches = "<<matches.size()<<" times\n";
    std::cout<<"\nMatches words:\n";
    for (const auto& i : matches) std::cout<<i<<" ";
    
    if (matches.size() > words.size()/2)
    {
        words.erase(std::remove_if(words.begin(), words.end(), [&matches](const std::string& s)
        {
            return std::any_of(matches.begin(), matches.end(), [&s](const std::string& str){return str == s;});
        }), words.end());
        matches.insert(matches.begin(), words.begin(), words.end());
        
        std::cout<<"\n\nResult:\n";
        for (const auto& i : matches) std::cout<<i<<" ";
    }
    
    std::cout<<"\n\n\n";
    return 0;
}
 
Текущее время: 19:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru