如何从具有两列的.txt文件创建并行数组?



我正在做一项任务,我必须创建一个程序,用户可以个性化购买新车的选项。我有一个包含两列的.txt文件,一列有价格(双倍(,另一列有选项(字符串(。我想有两个可以使用的并行数组,以便用户可以输入字符串选项,向量将自动更新汽车的价格。 这是.txt文件及其内容。

5000.0 Leather Seats
1000.0 DVD System
800.0 10 Speakers
1400.0 Navigation System
500.0 CarPlay
500.0 Android Auto
2000.0 Lane Monitoring
800.0 3/36 Warranty
999.0 6/72 Warranty
1500.0 Dual Climate
225.0 Body Side Molding
49.0 Cargo Net
87.0 Cargo Organizer
700.0 450W Audio
1000.0 Heated Seats

编辑:我很抱歉没有提供足够的信息,我是新来的。所以这是我到目前为止的代码:

void optionsLoop();
void printOptions();
char selectModel();
///function prototypes
int main(int argc, char const *argv[]) 
{
ifstream inStream;
int menuChoice;
char model;
const int SIZE = 30;

inStream.open("options.txt");
if (inStream.fail())
{
cout << "Error opening file";
exit (0);
}
do 
{
optionsLoop ();
cout << "Enter choice: ", cin >> menuChoice; 
switch (menuChoice)
{
case 1: 
model = selectModel();
break;
case 2:
printOptions();
}
}
while(menuChoice !=6);

return 0;
}/// main

void optionsLoop()
{
cout << " " <<endl;
cout << "Bob Cat Auto Dealership" << endl;
cout << "Please select choice" << endl;
cout << "1. Select a model (E, L, X)" << endl;
cout << "2. Display available options and prices" << endl; 
cout << "3. Add an option" << endl;
cout << "4. Remove an option" << endl;
cout << "5. Cancel Order" << endl;
cout << "6. Quit" << endl;
}

char selectModel() 
{   
char model;
cout << "Enter the model (E, L, X ) : ";
cin >> model;
model = toupper(model);
return model;

}

所以我有一个名为 options 的文件.txt它有两列,右列是选项的名称,左边是价格。我使用 ifstream 将信息读入程序。

我想将文件读取为两个并行数组,以便我可以在程序的其余部分使用它。

例如,对于选项循环中的选项 1,我需要让用户选择他/她想要的型号,然后显示起始价格。无论用户在菜单的选项3中选择什么选项,都会增加汽车的价格。因此,如果用户输入真皮座椅,价格将增加 5000 美元。这就是为什么我需要它们并行。

我希望这能澄清事情。我是数组和堆栈溢出的新手!

更喜欢使用std::vector而不是数组。
更喜欢使用std::vector<structure>数组而不是并行数组。
更喜欢在互联网上研究"C++读取空间分隔的数组"。

来吧:

double some_value;
std::string name;
std::vector<double> value_database;
std::vector<string> name_database;
//...
while (input_file >> some_value)
{
std::getline(input_file>>skipws, name);
value_database.push_back(value);
name_database.push_back(name);
}

我通过搜索StackOverflow找到了std::getline(input_file>>skipws,

编辑:必须使用数组对于那些必须使用数组
的指令类,这是另一种方法:

double value_again;
std::string name_again;
unsigned int array_capacity = 8U;
double * value_array = new double[array_capacity];
std::string * name_array = new std::string[array_capacity];
unsigned int records_read = 0U;
while (input_file >> value_again)
{
char separator;
input >> noskipws >> separator;
std::getline(input, name_again);
++records_read;
if (records_read > array_capacity)
{
unsigned int new_capacity = array_capacity * 2;
double * larger_value_array = new double [new_capacity];
std::copy(&value_array[0], &value_array[array_capacity], &larger_value_array[0]);
delete [] value_array;
value_array = larger_value_array;
std::string * larger_name_array = new std::string [new_capacity];
std::copy(&name_array[0], &name_array[array_capacity], &larger_name_array[0]);
delete [] name_array;
name_array = larger_name_array;
array_capacity = new_capacity;
}
value_array[records_read] = value_again;
name_array[records_read] = name_again;
++records_read;
}

上面的代码片段会根据数组的容量不断检查读取的记录。 如果阵列已满,则分配新阵列,将旧数据复制到新阵列,然后删除旧阵列。 此内存管理已经使用std::vector执行(在幕后(。

相关内容

  • 没有找到相关文章

最新更新