Мой английский не очень хорошо, но, надеюсь, вы поймете меня. Я знаю, что превращение строки в код невозможно в C++, но я просто не вижу другого способа решить мою проблему.Чтобы превратить строку в код
У меня есть массив структур. Вы можете сказать, что это база данных. Задача состоит в том, что пользователь должен выполнить комбинированный запрос. В консоли пользователь выбирает два параметра структуры и делает комбинированный запрос. Что-то вроде этого
cout<<"\nВыберите первый параметр для поиска:" // Choose first parameter
<<"\n1. processor"
<<"\n2. videocard"
<<"\n3. display"
<<"\n4. RAM"
<<"\n5. size"<<endl;
int first;
cin>>first;
cout<<"\nВыберите второй параметр для поиска:" // Choose second parameter
<<"\n1. processor"
<<"\n2. videocard"
<<"\n3. display"
<<"\n4. RAM"
<<"\n5. size"<<endl;
int second;
cin>>second;
cout<<"enter searchkey for first value: "
string search1;
cin>>search1;
cout<<"enter searchkey for second value: "
string search2;
cin>>search2;
string parameters[ 5 ] = { "processor", "videocard", "display", "RAM", "size" };
for (i = 0; i < size; i++) // And that's where it all goes wrong.
if (arrayOfStructs.parameters[ first ] == search1 && arrayOfStructs.parameters[ second ] == search2)
cout<<"found a match"<<endl;
Я знаю, почему код не работает. Я действительно уверен, что существует решение, похожее на мое. Мое «решение» похоже на перечисление, но перечисление в этом случае не подходит. Если вы знаете решение, напишите ниже.
Полный код моей программы
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
struct computer
{
string processor;
string videocard;
string display;
string RAM;
string size;
string getFieldValue(int);
};
string computer::getFieldValue(int fieldNumber)
{
stringstream str;
switch (fieldNumber)
{
case 1: str<<this->processor;
case 2: str<<this->videocard;
case 3: str<<this->display;
case 4: str<<this->RAM;
case 5: str<<this->size;
}
return str.str();
}
void coutAndWrite(computer aStruct, ofstream &aFile);
int main()
{
setlocale(0, "");
computer sklad[ 30 ];
computer temp;
int i = 0, j;
ifstream fromFile("structury.txt");
while (!fromFile.eof())
{
fromFile>>sklad[ i ].processor
>>sklad[ i ].videocard
>>sklad[ i ].display
>>sklad[ i ].RAM
>>sklad[ i ].size;
i++;
}
fromFile.close();
ofstream rezultaty("rezultaty.txt");
for (i = 0; i < 30; i++)
for (j = 0; j < 29; j++)
if (sklad[ j + 1 ].processor[ 0 ] < sklad[ j ].processor[ 0 ])
{
temp = sklad[ j + 1 ];
sklad[ j + 1 ] = sklad[ j ];
sklad[ j ] = temp;
}
while (1)
{
cout<<"\nВыберите тип запроса:"
<<"\n1. Простой"
<<"\n2. Составной"
<<"\n0. Выход из программы\n";
int prostoiIliSostavnoi;
cin>>prostoiIliSostavnoi;
if (prostoiIliSostavnoi == 0)
break;
if (prostoiIliSostavnoi == 1)
{
cout<<"\nВыберите параметр для поиска:"
<<"\n1. processor"
<<"\n2. videocard"
<<"\n3. display"
<<"\n4. RAM"
<<"\n5. size"<<endl;
int parametr;
cin>>parametr;
cout<<"Введите ключ поиска: ";
string poisk;
cin>>poisk;
cout<<"Результаты поиска: ";
for (i = 0; i < 30; i++)
if (sklad[ i ].getFieldValue(parametr) == poisk)
coutAndWrite(sklad[ i ], rezultaty);
}
}
system("pause");
}
void coutAndWrite(computer aStruct, ofstream &aFile)
{
cout<<"\nprocessor: "<<aStruct.processor
<<"\nvideocard: "<<aStruct.videocard
<<"\ndisplay: "<<aStruct.display
<<"\nRAM: "<<aStruct.RAM
<<"\nsize: "<<aStruct.size<<endl<<endl;
aFile<<setw(15)<<aStruct.processor
<<setw(15)<<aStruct.videocard
<<setw(20)<<aStruct.display
<<setw(10)<<aStruct.RAM
<<setw(10)<<aStruct.size<<endl;
}
Итак, вы перечислить ряд пунктов, и ожидаем, что пользователю ввести в одном из них, а затем вы хотите найти соответствующий пункт в 'struct' - так что если пользователь говорит' processor' , вы хотите 'arrayOfStructs [i] .processor'? –
В чем вопрос? Что ты пытаешься сделать? Что вы хотите, чтобы конечный результат был? –
Маты Петерсон. Пользователь не должен указывать, что пользователь «процессор» вводит соответствующее количество элементов. – eoLithic