C/C++

Отсортировать слова в лексикографическом порядке (C++)

Почти всё готово, только при вводе слов с клавиатуры возникает проблема, что некоторые символы (а иногда и вовсе слова) удаляются. В чём может быть проблема?
 #include    
#include

using namespace std;

string sorting(string str)
{
int k = 0;
for (int i = 0; i < str.length(); i++) { // Считаем пробелы
if (str[i] == ' ') {
k++;
}
}

// Динамически выделяем память для массива строк
string* words = new string[k + 1];

k = 0;
int word_begin = 0, word_end = 0;
for (int i = 0; i < str.length(); i++) // Заполняем массив строк
{
if ((str[i] == ' ') || (i == str.length() - 1))
{
word_end = i;
for (int j = word_begin; j words[j])
{
tmp = words[i];
words[i] = words[j];
words[j] = tmp;
}
}
str = "";
for (int i = 0; i < k; i++) { // Собираем отсортированную строку
str += words[i] + " ";
}

// Освобождаем память для массива строк
delete[] words;

return str;
}

int main()
{
setlocale(0, "Russian");
string str;
cout str;
getline(cin, str);
str = sorting(str);
cout
 лишнее:
cin >> str;

а в строке
for (int j = word_begin; j
Олег Гетманенко
Олег Гетманенко
51 416
Лучший ответ
 #include  
#include
#include
#include
#include
using namespace std;
string sorting(const string& line) {
istringstream iss(line);
string word;
vector words;
while (iss >> word) words.push_back(word);
sort(words.begin(), words.end());
stringstream ss;
for (const auto& item : words) ss
K|
K. |=_=|
67 646
 #include  
#include

using namespace std;

string sorting(string str)
{
int k = 0;
for (int i = 0; i < str.length(); i++) { // Считаем пробелы
if (str[i] == ' ') {
k++;
}
}

// Динамически выделяем память для массива строк
string* words = new string[k + 1];

k = 0;
int word_begin = 0, word_end = 0;
for (int i = 0; i < str.length(); i++) // Заполняем массив строк
{
if ((str[i] == ' ') || (i == str.length() - 1))
{
word_end = i;
for (int j = word_begin; j words[j])
{
tmp = words[i];
words[i] = words[j];
words[j] = tmp;
}
}
str = "";
for (int i = 0; i < k; i++) { // Собираем отсортированную строку
str += words[i] + " ";
}

// Освобождаем память для массива строк
delete[] words;

return str;
}

int main()
{
setlocale(0, "Russian");
string str;
cout