简体   繁体   English

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

[英]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.大小应由从中获取信息的“test.txt”文件定义。 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.例如,如果 txt 文件有 10 个数字,则数组的大小应为 10。我尝试使用向量,但无法使其工作。 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:来自 txt 文件的示例输入:

12 12

4 4

5 5

9 9

6 6

11 11

0 0

2 2

0.5 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);要使其与vector一起使用,您不应该创建具有多个元素的vector<float> v(10); ,例如vector<float> v(10); . . Create an empty vector and add one value at a time to it.创建一个空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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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