我最近开始学习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;
}
答案 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...
循环位于第一个循环中。