目前的问题是这个程序只能输入文本文件的名称。
我被告知要将它缩短到刚刚打开文本文件的位置并执行冒泡排序(它在当前状态下执行)。
文本文件示例:
-14,-5,7,1,7,71,-3,59 [气泡短] -14,-5,-3,1,7,7,59,71
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <vector>
using namespace std;
void bubbsort(int arr[]);
int main()
{
string file;
const int a = 100, b = 10, c = 10;
int count = 0, count1 = 0, d = 0, swap = 0;
int clam[a] = { 0 }, ray[b][c] = { 0 };
cout << "Type name of the file: " << endl;
cin >> file;
ifstream data;
data.open(file);
vector<int> array;
int number;
while (data >> number);
{
array.push_back(number);
count++;
d = count;
clam[count];
}
data.close();
data.open(file);
while (data.good())
{
int i;
for (i = 0; i<d; i++)
{
data >> clam[i];
cout << clam[i] << " ";
count1++;
}
}
cout << endl << "There are " << d << " integers within " << ' " ' << file << '"' << " file!" << endl;
data.close();
for (int k = 0; k <= count - 1; k++)
{
for (int l = k + 1; l <= count - 1; l++)
{
int temp = 0;
if (clam[k]>clam[l]){
temp = clam[k];
clam[k] = clam[l];
clam[l] = temp;
swap++;
}
}
}
cout << endl << "Sorting this " << swap << " # of swaps" << endl;
data.close();
cout << endl;
for (int y = 0; y<count; y++)
{
for (int z = 0; z <= 9; z++)
{
if (y != count)
{
cout << right << setw(4) << clam[y];
y++;
}
else
{
cout << endl;
system("pause");
return 0;
}
}
y = y - 1;
cout << endl;
}
system("pause");
return 0;
}
重命名infile函数似乎没有办法,我不知道如何调整它。
答案 0 :(得分:0)
简单地摆脱:
cout << "Type name of the file: " << endl;
cin >> file;
并将file
的定义更改为:
string file = "filename.txt";
答案 1 :(得分:0)
为了避免使用硬编码的文件名:
修改应用程序以从应用程序路径读取文件(已定义扩展名)。
获取应用程序路径(存在方式的数量):请参阅How to get program path。
遍历应用程序路径并查找具有所选扩展名的文件。 请查看:Boost Filesystem。
现在你应该有你的文件名。
约束:您不能在应用程序路径中使用与起泡文件排序相同的“垃圾”文件。
如果不接受此约束,您可以考虑使用数据“标记”文件(在文件的开头)。 然后,您可以在继续进行冒泡排序之前先检查此“标记”。