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

C++ program ( print out n words in alphabetical order ) runtime error

本文关键字:单词 运行时错误 打印 顺序 程序 C++      更新时间:2023-10-16

我最近开始学习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;
}

你做错了很多事情。在代码中读取所有数据之前,简单地开始排序。中断后的代码将永远不会执行。而且没有输出。

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

#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 data 
    std::sort( lista_cuvinte.begin(), lista_cuvinte.end());

仅此而已!

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

您在完成单词输入之前就开始了排序。第二个for (int i=0...循环在第一个循环内。