Определить длину строки во внешнем файле - PullRequest
0 голосов
/ 05 марта 2012

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

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

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

name[100];

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

Ответы [ 3 ]

1 голос
/ 06 марта 2012

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

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

0 голосов
/ 05 марта 2012

Я не уверен, соответствует ли это указаниям вашего инструктора, но в 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 голосов
/ 05 марта 2012

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

...