如何调整此冒泡排序

时间:2014-07-25 09:49:32

标签: c++ text-files bubble-sort

目前的问题是这个程序只能输入文本文件的名称。

我被告知要将它缩短到刚刚打开文本文件的位置并执行冒泡排序(它在当前状态下执行)。

文本文件示例:

-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函数似乎没有办法,我不知道如何调整它。

2 个答案:

答案 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

现在你应该有你的文件名。

约束:您不能在应用程序路径中使用与起泡文件排序相同的“垃圾”文件。

如果不接受此约束,您可以考虑使用数据“标记”文件(在文件的开头)。 然后,您可以在继续进行冒泡排序之前先检查此“标记”。