2016-07-09 3 views
-1

Во-первых, я новичок в C++, поэтому не отмечаю, что я ничего не знал или не был прав. У меня есть файл, который я пытаюсь прочитать в моей программе на C++. Я занимаюсь практикой для проекта. Я должен создавать и создавать объекты, и каждый экземпляр представляет собой одну строку файла с семью переменными. Файл содержит базу данных. Формат текстового файла:Входные данные разных типов из файла и НЕ ИСПОЛЬЗОВАНИЕ ВЕКТОРОВ

// String String Character Int Int Char Int 
// String String Character Int Int Char Int 
// etc. 

Существует ровно 350 членов данных. Больше никогда не бывает. Поэтому я использую массивы. Я не могу использовать векторы для этого проекта, как указано не для.

Каков наилучший способ приблизиться к этому только при использовании массивов?

моя первая попытка была создать 3 массивы:

 for (int l = 0; l < max_size; l++) { 
      myfile >> myintarray[l]; 
     } 
     for (int k = 0; k < max_size; k++) { 
      myfile >> mychararray[k]; 
     } 
     for (int i = 0; i < max_size; i++) { 
      myfile >> myarray[i]; 
      // print artists and title; 
     } 

     // Then I have to put it the object. Store as such.... 
     myloop = 0; 
     a = 2; 
     b = 5; 
     while (myloop < 50) { 
      myartwork[myloop].setRoom(mychararray[b]); 
      myartwork[myloop].myart.setMeduim(mychararray[a]); 
      a += 7; 
      b += 7; 
      myloop += 1; 
     } 
     // more code where I do the same thing with characters 
     // same things with strings..... 

Когда я попробовал, что он распечатан содержимое. это было inccorect. и mumbo jumbo. Итак, я думаю, что это потому, что я пытаюсь сохранить весь массив чисел, который он не может принимать, и выводит ошибку? Я не уверен, что это правильно.

Итак, я попытался использовать только один массив, который был строкой, затем преобразовал каждую строку в тип char или int. и это было больно, и я получаю сообщение об ошибке. и я не уверен, как передать тип символа.

  myloop = 0; 
      a = 3; 
      b = 4; 
      c = 6; 
      while (myloop < 50) { 
       //std::stoi (str_dec,&sz) 
       std::string::size_type sz; 

       // my object (instance). data......Try to convert this. 
       myartwork[myloop].mymysize.setLength(std::stoi(myarray[a], &sz)); 
       myartwork[myloop].mymysize.setWidth(std::stoi(myarray[b], &sz)); 
       myartwork[myloop].setPrice(std::stoi(myarray[c], &sz)); 
       a += 7; 
       b += 7; 
       c += 7; 
       myloop += 1; 
      } 

Есть ли лучший способ сделать это, то эти два метода? Я на правильном пути?

+0

_ "Я не могу использовать векторы" _. Затем используйте 'std :: deque'. Или 'std :: list' –

ответ

0

Использование многих массивов с одинаковой мощностью обычно является признаком плохого дизайна.

Давайте поговорим о моделировании здесь. Определим запись как контейнер полей. Запись будет соответствовать одной текстовой строке в вашем файле. Таким образом, модель это:

struct Record 
{ 
    std::string s1; 
    std::string s2; 
    char  c1; 
    int   i1; 
    int   i2; 
    char  c1; 
    int   i3; 
}; 

Теперь вы можете объявить таблицу, или массив записей:

#define MAXIMUM_RECORDS (350) 
Record database[MAXIMUM_RECORDS]; 

еще несколько вещей, чтобы сделать:

  1. перегрузки operator >> читать из входного файла.
  2. Внедрить конструкторы, скопировать конструкторы и оператор присваивания.
  3. сравнения перегрузки операторов: ==, > и т.д.
  4. перегрузки operator << напечатать запись.
Смежные вопросы