Top.Mail.Ru
Ответы

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

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
 #include <string>   
#include <iostream>   
 
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 <= word_end; j++) 
                words[k] += str[j]; 
            k++; 
            word_begin = word_end + 1; 
        } 
    } 
    string tmp = ""; 
    for (int i = 0; i < k; i++) // Сортируем массив строк 
        for (int j = i + 1; j < k; j++) { 
            if (words[i] > 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 << "Введите строку слов: " << endl; 
    cin >> str; 
    getline(cin, str); 
    str = sorting(str); 
    cout << str; 
    return 0; 
} 
По дате
По рейтингу
Аватар пользователя
Новичок
123456789
 лишнее:
cin >> str;

а в строке
for (int j = word_begin; j <= word_end; j++) 
<= заменить на <
иначе слово забирается с пробелом

PS: help me please - уже отсортировано 
Аватар пользователя
Высший разум
123456789101112131415161718192021222324252627
 #include <algorithm> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 
using namespace std; 
string sorting(const string& line) { 
    istringstream iss(line); 
    string word; 
    vector<string> words; 
    while (iss >> word) words.push_back(word); 
    sort(words.begin(), words.end()); 
    stringstream ss; 
    for (const auto& item : words) ss << item << ' '; 
    auto result = ss.str(); 
    result.pop_back(); 
    return result; 
} 
int main() { 
    system("chcp 1251 > nul"); 
    cout << "Введите строку из слов: "; 
    string line; 
    getline(cin, line); 
    line = sorting(line); 
    cout << "Отсортированная строка: " << line << '\n'; 
    system("pause > nul"); 
} 
Аватар пользователя
Мастер
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
 #include <string> 
#include <iostream> 
 
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 <= word_end; j++) 
                words[k] += str[j]; 
            k++; 
            word_begin = word_end + 1; 
        } 
    } 
    string tmp = ""; 
    for (int i = 0; i < k; i++) // Сортируем массив строк 
        for (int j = i + 1; j < k; j++) { 
            if (words[i] > 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 << "Введите строку слов: " << endl; 
    getline(cin, str); 
    str = sorting(str); 
    cout << str; 
    return 0; 
}