Я сохранил свои данные во внешний файл в этом формате

Line 1: Name1|Address1
Line 2: Name2|Address2

Теперь я верну эти данные в свою программу. Я хочу сохранить имя в переменной NAME, которая представляет собой массив символов. Однако мой инструктор требует, чтобы массив NAME выделялся динамически. По этой причине я не могу просто объявить

name[100];

Итак, каков эффективный способ определить длину имени в файле, чтобы я мог использовать его для выделения моей строки.

0
XabiAlonso 5 Мар 2012 в 22:57

3 ответа

Лучший ответ

Метод грубой силы:
1. Установите размер массива равным нулю.
2. если необходимо увеличить размер массива:
2.1. выделить новый массив, который на 1 больше, чем старый массив.
2.2. скопируйте все символы из предыдущего массива в новый массив.
2.3. добавить новый символ в новый массив.
3. увеличить переменную размера массива.

Существуют вариации выделяемого размера. Некоторые реализации string удваивают размер старого массива. Другие используют последовательность Фибоначчи.

1
Thomas Matthews 5 Мар 2012 в 21:06

Прочитать его как std :: string, а затем вызвать name.size ()? Вы можете разделить на "|" чтобы получить только название в первой части.

0
01100110 5 Мар 2012 в 19:01

Я не уверен, соответствует ли это указаниям вашего инструктора, но способ C ++ - использовать std::string (поскольку вы помечены как C ++) вместо массива символов.

std::ifstream file("data.txt");
std::string name;
std::string address;

while (file) {
  std::getline(file, name, '|');
  std::getline(file, address);
  std::cout << "Name: " << name << "Address: " << address << "\n";
}

std::getline прочитает все символы до вертикальной черты и сохранит это значение в name, а затем прочитает остальные символы до новой строки и сохранит это значение в address. Если вам нужно количество символов в name, просто позвоните name.size().

0
Marlon 5 Мар 2012 в 19:07