我必须对数组使用冒泡排序算法。我必须使用函数定义:
string Sort(double array[8]);
我的程序需要从一个名为“ values.txt”的文本文件中读取。在每一行上,将以逗号分隔的双精度值列表。每个列表的长度为8个元素。我需要使用BUBBLE SORT算法对这些列表进行排序。每行应排序,然后以升序显示。文本文件中的每一行都将换行。
例如,给定一个列表:6.4,3.25,7.5,2.5,1.1,11.6,0.5
排序结果应为:0.5,1.1,2.5,3.25,6.4,7.5,11.6
我的代码运行良好,除了它只读取文本文件的第一行。我需要它来读取文本文件中的每一行并对其进行排序然后显示。我知道我需要一个while循环,但是当我包含它时,我会得到关于空间和核心转储的错误?我的代码如下。预先感谢。
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
using namespace std;
string Sort(double array[8]);
void swap(int &, int &);
int main()
{
double array[8];
string sline, snum,svalues;
ifstream inputfile;
inputfile.open("values.txt");
if (!inputfile.is_open())
{
cout<<"error with file"<<endl;
}
getline(inputfile,sline);
svalues = sline;
stringstream ss(svalues);
int i =0;
while (getline(ss, snum, ','))
{
array[i] = stod(snum);
i++;
}
inputfile.close();
Sort(array);
for (int c= 0; c<8; c++)
{
if (c==7)
{
cout<<array[c]<<"";
}
else
cout<<array[c]<<",";
}
return 0;
}
string Sort(double array[8])
{
int maxelem;
int index;
for(maxelem = 8-1; maxelem>0; maxelem--)
{
for (index=0; index<maxelem; index++)
{
if (array[index] > array[index+1])
swap(array[index], array[index+1]);
}
}
}
void swap(int &a, int &b)
{
int temp = a;
a=b;
b=temp;
}
索引存在问题,该文件有7个数字,但是您正在对其进行排序,就好像它们是8个数字一样,因此未初始化已排序数组中的第一个索引。您可以在文件中再加上一个数字,也可以将函数的索引减少到7,还可以减少数组的大小。
排序函数的返回类型为string
,但不返回任何内容,请使其无效。
这两者都会导致不确定的行为。
这段代码:
if (!inputfile.is_open())
{
cout << "error with file" << endl;
}
如果发生错误,打印不足,您必须停止执行I / O部分:
if (!inputfile.is_open())
{
cout << "error with file" << endl;
}
else
{
getline(inputfile,sline);
//...
}
return 0;
读取1行后,您正在关闭文件。完成后关闭文件。完整代码:
while(getline(inputfile, sline)) {
svalues = sline;
std::cout << "Current line: " << sline << '\n';
stringstream ss(svalues);
int i =0;
while (getline(ss, snum, ','))
{
array[i] = stod(snum);
i++;
}
// using std::sort
// std::sort(array, array + 8);
Sort(array);
for (int c= 0; c<8; c++)
{
if (c==7)
{
cout<<array[c]<<"";
}
else
cout<<array[c]<<",";
}
std::cout << std::endl;
}
//close the file
inputfile.close();
return 0;
P.S:您没有从Sort()
函数返回任何内容,因此请将其返回类型更改为void
。如果have返回string
,请确保从函数中返回一些内容:
string Sort(double array[])
{
// sorting logic...
std::stringstream ret;
for (int i = 0; i < 8; ++i)
{
ret << array[i] << ', ';
}
return ret.str();
}
并且在主功能中,只需执行以下操作,而不是手动打印出值:
cout << Sort(array) << '\n';