在C ++中按字母顺序排列列表中的所有单词

时间:2015-10-05 20:21:41

标签: c++ string vector alphabetical

#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 ++函数,并希望我们创建自己的算法来排列这个向量。

我的算法在列表中找到最小值(字母表中的字符串)字符串(使用'&lt;'运算符),然后将其放在向量的开头,将索引更新为1并重复该过程直到列表被订购。我唯一的问题是,正如其他人告诉我的那样,使用填充字符串的向量总是很乱,我的代码没有显示正确的答案,(好像向量没有更新或正在进行任何操作)。

有人可以找到我的代码有什么问题吗?

2 个答案:

答案 0 :(得分: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处理,而不是从零

处理

答案 1 :(得分:-1)

通过经典的冒泡排序,你必须继续。感谢维基百科。请给予用户Christophe BoueeCinq的答案权。 ccgousset@gmail.com

 #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;
    }