2015-10-05 5 views
0
#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
#include <string> 

using namespace std; 

void alpha_sorting(vector<string>& a); 
void swap_function(vector<string>& x,int& l); 
string alpha_least(vector<string>& list,int& idx); 
int min_word_index(string& min,vector<string>& listed); 

int main(){ 
    ifstream infile; 
    infile.open("words.txt"); 
    if(!infile.is_open()){ 
     cout << "Could not open the input file" << endl; 
     exit(EXIT_FAILURE); 
    } 
    vector<string> words; 
    string temp; 
    while(infile >> temp){ 
     words.push_back(temp); 
    } 
    sort_words_alphabetically(words); 
    cout << "Those words in alphabetical order are " << endl; 

    return 0; 
} 

void alpha_sorting(vector<string>& a){ 
    int index = 0; 
    while(index < a.size()){ 
     swap_min_to_top(a, index); 
     index++; 
    } 
    for(int i = 0;i < a.size();i++){ 
     cout << a[i] << endl; 
    } 
} 

void swap_function(vector<string>& x,int& l){ 
    string temporary; 
    temporary = x[l]; 
    wrdx[loc] = minimum_word(x, l); 
    int min_idx = min_word_index(x[l], x); 
    x[min_idx] = temporary; 
} 

string alpha_least(vector<string>& list,int& idx){ 
    string temp = list[idx]; 
    for(int i = idx;i < list.size();i++){ 
     if(list[i] < temp){ 
      temp = list[i]; 
     } 
    } 
    return temp; 
} 

int min_word_index(string& min,vector<string>& listed){ 
    for(int i = 0;i < listed.size();i++){ 
     if(min == listed[i]){ 
      return i; 
     } 
    } 
    return -1; 
} 

Привет всем,Устройте все слова в списке в алфавитном порядке в C++

Короче говоря, задание требует от нас, чтобы прочитать слова из файла и расположить их в алфавитном порядке, и отображать их на экран.

Назначение специально запрещает использование функций C++, таких как сортировка и т. Д., И ожидает, что мы создадим наш собственный алгоритм для упорядочивания этого вектора.

Мой алгоритм находит в списке минимальный (тот, который приходит в алфавите) (используя оператор «<»), а затем помещает его в начале вектора, обновляет индекс на 1 и повторяет процесс пока список не будет заказан. Моя единственная проблема заключается в том, что, как мне сообщили другие, использование векторов, заполненных строками, всегда беспорядочно, мой код не отображает правильный ответ (как если бы векторы не обновлялись или не выполняли какие-либо операции, если на то пошло).

Возможно, кто-то найдет, что случилось с моим кодом?

+1

Для того, чтобы отсортировать векторный код * swap * elements. Ни в каком пункте вашего алгоритма у вас нет двух индексов, которые вы меняете. Похоже, вы просматриваете половину обмена. Попытайтесь сделать эту функцию первым * поиском *, что он хочет поменять местами, и только потом сделать обмен. – dascandy

+1

@ dascandy Я сделал функцию swap_min_to_top для этого. что-то не так? – Afr0

+0

Если это не домашняя работа, попробовали ли вы 'std :: sort'? –

ответ

2

После того, как быстрый взгляд здесь один вопрос, В swap_min_to_top вы wrdx[loc] = minimum_word(wrdx, loc); И ТОГДА int min_idx = min_word_index(wrdx[loc], wrdx); Это сделает ваш min_idx всегда равен loc (потому что вы просто назначены его)

Вы можете min_word_index в процесс от 1 + idx, вместо нуля

+0

Учитывая, что он признал, что это домашняя работа, я не хотел указывать на это слишком явно - у него есть кое-что, что нужно сделать, чтобы выяснить, почему это не сработало, а затем то, что он делает. Кроме того, базовое обучение об отладке, отладчиках и модульных тестах. – dascandy

+0

Большое спасибо @ theAlias. Программа теперь работает без проблем! – Afr0

-1

С классическим сортом пузыря вы должны продолжать. Благодаря Википедии. Пожалуйста, дайте ответы на права пользователя Christophe BoueeCinq. [email protected]

#include <iostream> 
    #include <fstream> 
    #include <cstdlib> 
    #include <vector> 
    #include <string> 
    #include <stdlib.h> 
    #include <conio.h> 
    using namespace std; 

    int flag=0; 
    string tmp=""; 
    int index=0; 
    int k=0; 

    int main() 
    { 
     ifstream infile; 
     infile.open("words.txt"); 
     if(!infile.is_open()) 
     { 
      cout << "Could not open the input file" << endl; 
      exit(EXIT_FAILURE); 
     } 
     vector<string> words; 
     string temp; 
     while(infile >> temp) 
     { 
      words.push_back(temp); 
      cout <<temp<<endl; 
     } 
     cout <<"-----"<<endl; 

     int inx=0; 
     int i=0; 
     int change=0; 
     int j=0; 

     i =words.size(); // longueur(t) 
     change = 1; 
     while ((i>0) && (change==1)) 
     { 
      change = 0; 
      for (j=1; j<words.size()-1; j++) //  pour j allant de 1 à i-1 pas 1 faire 
      { 
       if (words[j] > words[j + 1]) 
       { 
        tmp = words[j]; 
        words[j] = words[j+1]; 
        words[j+1] = tmp; 
        change = 1; 
       } 
      } //  fin pour 
      i = i - 1; 
      // fin tant que 
     } 

     _getch(); 


     for (j=0; j<words.size(); j++) 
     cout <<"xx "<<words[j]<<endl; 
    } 
+0

Привет, Gitaar, сначала я анонимным способом, чтобы участвовать в жизни сайта. Моя настоящая почта ccgousset @ gmail.com вне времени (мне кажется ...). Два, почему для моего кода применяется это отрицательное разрешение? Этот код работает и является единственным реальным хорошим ответом между множеством репонов. Конечно, это не идиот. Амикальмент Кристоф. – user5412774

+0

«Цель спора или дискуссии не должна быть победой, а прогрессом» - Джозеф Жубер, перефразируя Пьера де Кубертина в другом замечательном комментарии «Единственное поражение - это две дочери матери» – user5412774

+0

Привет, я вижу, что вы удалили этот оскорбительный комментарий, поэтому я удалил мой, который обратился к этому. Что касается даун-голосования (который не был моим): вы (и «мы»), похоже, сталкиваемся с языковым барьером. * «Пожалуйста, дайте ответы на права пользователя Christophe B ******* q. C ******* [email protected]« * * звучит/выглядит * для многих людей как вопрос (что ожидает ответа на этот вопрос, который будет отправлен на адрес электронной почты). На SO вопросы должны быть размещены как вопросы (а не ответы), а комментарии/замечания к вопросам и ответам оставляются в комментариях (а не в электронной почте). – GitaarLAB

Смежные вопросы