C ++程序(按字母顺序打印n个单词)运行时错误

时间:2014-10-14 18:17:00

标签: c++ c++11

我最近开始学习C ++编程,当我的思想缺乏创造力时,我会兴趣地看你的许多帖子和答案。我在这里有一些关于此代码的问题。基本上它应该显示" n"按字母顺序排列的单词。 " N"由用户介绍和单词。我得到一个奇怪的错误,有人可以给我一些关于我应该做什么的提示吗?

#include <iostream>
#include <vector>
#include <string>

int main () {
    int n=0;
    std::string cuvant;
    std::vector<std::string> lista_cuvinte;
    std::cout<<" Cate cuvinte doriti sa comparati = "<< std::endl;
    std::cin>> n;

    for (int i=0; i<n; i++)
    {
        std::cout<<"cubantul al " << i + 1 <<" -lea = ";
        std::cin>> cuvant;
        lista_cuvinte.push_back(cuvant);

        for (int i=0; i < n; i++)
        {
            for (int j=i + 1; j < n; j++)
            {
                if (lista_cuvinte.at(i) > lista_cuvinte.at(j))
                {
                    std::string temp=lista_cuvinte.at(i);
                    lista_cuvinte[i]=lista_cuvinte.at(j);
                    lista_cuvinte[j]=temp;
                    i=i-1;
                    break;
                    std::cout<< temp << std::endl;
                }
            }
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

你做错了很多事。只需在代码中读入所有数据之前开始排序。休息后的代码永远不会执行。而且没有输出。

但是使用sort中的algorithm可以更简单地获得相同的结果。我相信你的代码只是用于学习,所以手工完成它可能是有意义的。通常不会:-)

#include <iostream>
#include <vector>
#include <string>

int main () {
    int n=0;
    std::string cuvant;
    std::vector<std::string> lista_cuvinte;
    std::cout<<" Cate cuvinte doriti sa comparati = "<< std::endl;
    std::cin>> n;

    // read data 
    for (int i=0; i<n; i++) 
    {   
        std::cout<<"cubantul al " << i + 1 <<" -lea = ";
        std::cin>> cuvant;
        lista_cuvinte.push_back(cuvant);
    }   

    // sort data 
    for (int i=0; i < n; i++) 
    {   
        for (int j=i + 1; j < n; j++) 
        {   
            if (lista_cuvinte.at(i) > lista_cuvinte.at(j)) 
            {   
                std::string temp=lista_cuvinte.at(i);
                lista_cuvinte[i]=lista_cuvinte.at(j);
                lista_cuvinte[j]=temp;
                i=i-1;
                break;
            }   
        }   
    }   

    // output data
    for (int i=0; i<n; i++) 
    {   
        std::cout << lista_cuvinte[i] << std::endl;
    }   

    return 0;
}   

使用std :: sort,您在部分排序中的代码会缩减为:

        // sort data 
    std::sort( lista_cuvinte.begin(), lista_cuvinte.end());

多数民众赞成!

作为一般提示写入和查找错误的提示:请使用调试器。您的代码只会引发异常。您的调试器将为您捕获它,并进入回溯到发生错误的位置。在你的代码中,它是一个超出数组范围的访问,因为在这个执行点没有读入数据。

答案 1 :(得分:0)

在完成单词输入之前,您正在开始排序。您的第二个for (int i=0...循环位于第一个循环中。