Я пытаюсь реализовать дерево AVL, используя пары ключ/значение из текстового файла. Например, (0003 099390, Vegas) будет одной такой ключевой парой значений, а 0003 - ключом, а 09390 - Вегасом. Я смущен тем, как извлекать каждый отдельный элемент. Я бы хотел, чтобы 0003, 09390 и Vegas хранились как каждая отдельная переменная в структуре.Реализация дерева AVL с использованием значений из текстового файла
ответ
Я рекомендую использовать структуру для хранения значений:
struct Values
{
std::string value; // such as 09390
std::string city; // such as "Vegas"
};
Далее, перегрузить оператор извлечения:
struct Values
{
std::string value; // such as 09390
std::string city; // such as "Vegas"
friend std::istream& operator>>(std::istream& inp, Values& v);
};
std::istream& operator>>(std::istream& inp, Values& v)
{
inp >> v.value;
// insert code to skip over delimiter.
inp >> v.city;
return inp;
}
Ваш входной контур может выглядеть следующим образом:
std::string key;
std::string delimiter;
Values v;
AVL tree;
//...
while (input_file >> key >> delimiter >> v)
{
tree[key] = v;
}
Примечание: вышеупомянутое входное выражение работает только тогда, когда значения не пробел или табуляция.
Для получения дополнительной информации о чтении из файла, поиск StackOverflow для:
- "C++ прочитать файл-структуру"
- "C++ прочитать файл CSV"
К сожалению, чтение 'std :: string' рассматривает пробелы как разделители. Таким образом, чтение «ключа» будет читать все. –
Да, я собирался записать записку об этом. Это работает, когда элементы не разделяются пробелами. –
Самый простой подход, вероятно, для использования ignore()
в сочетании с std::getline()
:
std::string key, code, city;
if (in.ignore(std::numeric_limits<std::streamsize>::max(), '(')
&& std::getline(in, key, ',')
&& std::getline(in, code, ',')
&& std::getline(in, city, ')')) {
// ...
}
- 1. Реализация дерева AVL с использованием списка
- 2. Реализация карты с использованием дерева AVL
- 3. C++ Реализация дерева AVL
- 4. Реализация дерева AVL
- 5. реализация AVL дерева ToString()
- 6. AVL дерева, с, реализация вращения
- 7. Реализация дерева AVL через наследование
- 8. Создание дерева AVL из дерева двоичного поиска
- 9. Удалить родителя из дерева AVL
- 10. Печать левого и правого значений дерева avl
- 11. Чтение значений из текстового файла в массив 2D numpy с использованием значений индекса из текстового файла
- 12. Реализация дерева AVL с узлами или без узлов
- 13. Построение дерева в java с использованием ввода из текстового файла
- 14. Реализация дерева с использованием NatTable
- 15. AVL дерева поиска
- 16. Печать дерева AVL: Java
- 17. Балансировка двоичного дерева (AVL)
- 18. AVL дерева принятие
- 19. балансировка дерева AVL (C++)
- 20. Java - поиск дерева AVL
- 21. AVL Tree Insertion - Реализация
- 22. Вставить метод дерева AVL?
- 23. Перебалансирования в AVL дерева
- 24. Эффективность вращения дерева AVL
- 25. Найти медиану AVL-дерева
- 26. Вставка AVL дерева
- 27. Балансировка дерева AVL haskell
- 28. Преобразование значений с использованием текстового файла
- 29. Реализация AVL add с C++?
- 30. Удалить из примера примера дерева AVL
Если ваш текстовый файл имеет хорошо структурированные данные (выглядит так), полезно научиться читать с помощью 'scanf'. Если его достаточно просто, 'cin/getline' будет выполнять эту работу. – VillasV
@VillasV Я не рекомендую использовать 'scanf'. 'std :: getline' и' stringstream' - лучшее решение. – erip
@erip yes, другие пользователи SO закричали мне уже за рекомендацию 'scanf' для новых пользователей. Я не вижу ничего плохого, хотя это очень хорошо для структурированных данных. Я бы рекомендовал, чтобы данные были недостаточно структурированы. – VillasV