C ++编程从外部文本文件定义数组大小

问题描述 投票:-1回答:1

我正在尝试使数组的大小为非恒定值。该大小应由获取信息的“ test.txt”文件定义。例如,如果txt文件包含10个数字,则该数组的大小应为10。我尝试使用矢量,但无法使其正常工作。任何帮助将非常感激。这是下面的代码:

#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include<cstdlib>

using namespace std;

/* Function to print an array
A int[]: an array of n element
n int; length of an array
*/
void displayList(float A[], int n)
{
int i;
for (i = 0; i < n; i++)
    cout << A[i] << ", ";
    cout << endl;
}

/*
  Insertion Sort function
  A int[]: an array of n element
  n int; length of an array
*/
void insertionSort(float A[], int n)
{
int i, j;
float key;
for (i = 1; i < n; i++)
{
    key = A[i];// take key  
    j = i - 1;

    /* Move elements of arr[0..i-1], that are
    greater than key, to one position ahead
    of their current position */
    while (j >= 0 && A[j] > key)
    {
        A[j + 1] = A[j]; // move element to next postion 
        j = j - 1;  // reduce index of j - go backward in the array
    }
    std::cout << "Step key at i = " << i << ": [" << key << "] inserted at j = " << j + 1 << "                         
   position -> ";
    A[j + 1] = key;  // at j+1 th position we place the key
    displayList(A, n);
}
 };


ifstream input("test.txt"); //put your program together with thsi file in the same folder.

int main() {
    int const ARRAY_SIZE = 9;
    float A[ARRAY_SIZE];
    string line;
    ifstream inFile;
    int i = 0, cnt = 0;
    float n;

inFile.open("test.txt");

if (!inFile) {
    cout << "Unable to open file";
    exit(1); // terminate with error
}


while (!inFile.eof()) {
    getline(inFile, line);
    n = atof(line.c_str());
    cnt++;
}

int cnt;
cin >> cnt;
vector<float> A(cnt);

inFile.close();
inFile.open("test.txt");

if (!inFile) {
    cout << "Unable to open file";
    exit(1); // terminate with error
}


while (!inFile.eof()) {
    getline(inFile, line);
    n = atof(line.c_str());
    A[cnt++] = n;
}


inFile.close();
n = sizeof(A) / sizeof(A[0]);

cout << "insertionSort: \n";
cout << "Unsorted array:                            ";
displayList(A, n);
insertionSort(A, n);

std::cout << "Sorted array:                              ";
displayList(A, n);

}

来自txt文件的示例输入:

12

4

5

9

6

11

0

2

0.5

c++ arrays sorting sizeof
1个回答
0
投票

要使其与vector一起使用,您不应创建包含多个元素的向量,例如vector<float> v(10);。创建一个空的vector并一次添加一个值。

void display(const std::vector<float>& A) {
    std::cout << "Got " << A.size() << " elements.\n";

    for(float value : A) {
        std::cout << value << '\n';
    }
}

int main() {
    std::vector<float> A;   // an empty vector of floats

    float temp;             // a temporary float to use for extraction
    while(input >> temp) {  // loop while extraction succeeds
        A.push_back(temp);  // save the value at the end of the vector
    }

    display(A);
}
© www.soinside.com 2019 - 2024. All rights reserved.