Не могу преобразовать string в vector

Вот мой код:

#include <iostream> 
#include <string>
#include <sstream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
int main () {
std::cout << "Enter your sentence: ";
std::string sentence;
std::getline(std::cin, sentence);
std::vector<std::string> v(sentence.begin(), sentence.end());///// подчеркивается sentence в begin (отсутствуют экземпляры конструктора)

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

for (size_t idx = 0; idx < sentence.length(); idx++)
   v[idx] = sentence[idx];
std::sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++)
    std::cout << v[i] << ' ';
}

Нельзя, что бы пользователь сразу вводил строку как вектор.Заранее спасибо.


Ответы (1 шт):

Автор решения: S.H.

Вам нужно разбить строку на слова.

Потом с вектором строк можно делать что угодно - сортировать, преобразовывать и т.п.

Воспользуйтесь следующей реализацией функции Split():

    vector<string> split(const string &s, char delim) {
        vector<string> elems;
        stringstream ss(s);
        string item;
        while(getline(ss, item, delim)) {
            elems.push_back(item);
        }
        return elems;
    }

Использование - примерно такое: vector<string> tmp = split(s, ' ');

Для того, чтобы компилировалось, должны быть подключены #include <vector> и #include <sstream>

А, и еще - писал в "олимпиадном стиле", то есть, предполагается, что в коде есть using namespace std;

Дополнение

Если вызвать sort так, как это написано в вопросе - вектор будет отсортирован "естественным образом", то есть, по алфавиту.

Чтобы сделать сортировку по длинне слов стандартыми средствами - нужно в вызов sort добавить третий параметр - компарер, то есть функцию, которая умеет сравнивать два элемента. В нашем случае сравнение будет очень простым: bool comp(const std::string& a, const std::string& b){ return (a.length() < b.length()); }

Так, попробуем вставить функцию в код и запустить его.

Полный код:

    #include <iostream> 
    #include <string>
    #include <sstream>
    #include <stdlib.h>
    #include <algorithm>
    #include <vector>

    std::vector<std::string> split(const std::string &s, char delim) {
        std::vector<std::string> elems;
        std::stringstream ss(s);
        std::string item;
        while(getline(ss, item, delim)) {
            elems.push_back(item);
        }
        return elems;
    }
    
    bool comp(const std::string& a, const std::string& b){
        return (a.length() < b.length());
    }
    
    int main () {
    std::cout << "Enter your sentence: ";
    std::string sentence;
    std::getline(std::cin, sentence);
    std::vector<std::string> v = split(sentence, ' ');///// подчеркивается sentence в begin (отсутствуют экземпляры конструктора)

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

    // for (size_t idx = 0; idx < sentence.length(); idx++)
    //    v[idx] = sentence[idx];
    std::sort(v.begin(), v.end(), comp);
    for(int i = 0; i < v.size(); i++)
        std::cout << v[i] << ' ';
    }

Пример работы программы:

    Enter your sentence: you are beautiful like a dream come alive
    a you are like come dream alive beautiful
→ Ссылка