简体   繁体   中英

C++ programming define array size from the external text file

I am trying to make my array have a size of a non-constant value. The size should be defined by the "test.txt" file that gets the information from. For example, if the txt file has 10 numbers then the array should be in size of 10. I tried using vectors but I couldn't make it work. Any help would be much appreciated. Here is the code below:

#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);

}

sample input from txt file:

12

4

5

9

6

11

0

2

0.5

To make it work with vector s you shouldn't create the vector with a number of elements, like vector<float> v(10); . Create an empty vector and add one value at a time to it.

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM