C++ 编程从外部文本文件定义数组大小
C++ programming define array size from the external text file
我正在尝试使我的数组具有非常量值的大小。大小应由从中获取信息的 "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
要使其与 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);
}
我正在尝试使我的数组具有非常量值的大小。大小应由从中获取信息的 "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
要使其与 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);
}