Отсортировать слова в лексикографическом порядке (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;
}