Моя домашняя работа заключалась в написании приложения, которое сортирует заданный текст в алфавитном порядке. Для этого мне было разрешено использовать только библиотеки 'vector', 'string' и 'iostream'.
Я добился успеха, но теперь борюсь со странной проблемой - хотя я пытаюсь отсортировать короткий текст, все работает хорошо, но при более длинных входах программа, похоже, попадает в бесконечный цикл или проблему эффективности. Например, в тексте
"Albert Einstein 14 March 1879 – 18 April 1955 was a German-born theoretical physicist who developed the theory of relativity one of the two pillars of modern physics alongside quantum mechanics His work is also known[...]"
все прекрасно работает до фразы "механика". После добавления этого или любого другого слова программа работает вечно, как я упоминал ранее.
Боюсь, что в этом случае мне нужно вставить весь код (пожалуйста, прости).
#include <iostream>
#include <string>
#include <vector>
int compare(std::string first, std::string second){
int flag = 1;
int i;
if (first.size() <= second.size()){
for (i = 0; i<first.size(); ++i ){
if (first[i] == second[i]){
continue;}
else if (first[i] > second[i]){
flag = 0;
break;}
else {
break;}}}
else {
for (i = 0; i<second.size(); ++i ){
if (first[i] == second[i]) {
continue;}
else if (first[i] > second[i]){
flag = 0;
break;}
else {
break;}
}
int m = second.size() - 1;
if (first[m] == second[m]){
flag = 0;}}
return flag;}
int main() {
std::vector<std::string> text;
std::string word;
std::string tmp;
while(std::cin >> word){
text.push_back(word);}
int mistakes, m = 1;
while(m) {
mistakes = 0;
for (int index = 1; index < text.size() ; ++index){
if (!(compare(text[index-1], text[index]))){
tmp = text[index];
text[index] = text[index-1];
text[index-1] = tmp;
mistakes += 1;}}
m = mistakes;}
for (auto element: text){
std::cout << element << " ";}}
Мне бы очень хотелось услышать, как это исправить и почему именно эта проблема возникает - по крайней мере, время выполнения не увеличивается с длиной ввода, но больше похоже на «работает / не работает», что в отличие от вопросов эффективности.