Форум программистов, компьютерный форум CyberForum.ru

Преобразование информции из текстового файла в двумерный массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Max_Drovosek
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 00:12     Преобразование информции из текстового файла в двумерный массив #1
Есть такая задачка
В visual studio 2008 на С++ нужно рассчитать кратчайший путь от точки к точке в лабиринте. Лабиринт задается в текстовом файле, где ####- границы, пробелы - свободные клетки, а буквы А и В - начало и конец соответственно. Кратчайший путь заполняется точками.
Хочу применить волновой алгоритм, но в текстовом файле...
Вот и главный вопрос: если я могу в горизонтальной строке переходить между клетками, то как можно вертикально переходить между строками? Типа преобразовать текст в двумерный массив, чтобы можно было двумя счетчиками определять колнку и строчку
Это возможно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.02.2012, 00:28     Преобразование информции из текстового файла в двумерный массив #2
Max_Drovosek, покажите пример что у Вас записано в файле?
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
19.02.2012, 00:45     Преобразование информции из текстового файла в двумерный массив #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
string str;
int n=15; // размер матрицы 15х15
ifstream base(st);
 
//считываем лабиринт с файла
int j=0;
while (!base.eof())
{
base.getline(str, n+1, '\n');
for(int i=0; i<n; i++){labr[j][i]=str[i];}
j++;
}
Max_Drovosek
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 00:48  [ТС]     Преобразование информции из текстового файла в двумерный массив #4
Примера нету сейчас нормального, чуть позже смогу выложить
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
19.02.2012, 00:53     Преобразование информции из текстового файла в двумерный массив #5
Цитата Сообщение от Max_Drovosek Посмотреть сообщение
##############
# # .......#
# A # .#####.#
# .....# ##.#
######### #..#
# B#.##

# ######..#..#
# # #.###.#
# # .....#
##############
пример дан в блокноте, при вставке чуть сместился
Хотя если скопировать обратно, то получается красиво
читай мой пост. labr - тип char st - путь к файлу
Max_Drovosek
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 00:58  [ТС]     Преобразование информции из текстового файла в двумерный массив #6
Цитата Сообщение от sannee Посмотреть сообщение
читай мой пост. labr - тип char st - путь к файлу
Тоесть теперь i, j - индексы массива и спокойно можно применять волновой алгоритм?
Спасибо большое)
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 00:59     Преобразование информции из текстового файла в двумерный массив #7
вам лучше немного по другому пути пойти.

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

Теперь к лабиринту:
В файле у вас текстовое представление лабиринта. Считайте этот текст в двумерный массив чаров.
В этом массиве поменяйте значения чаров на нужные вам. Ведь работать с двумерным массивом чаров удобнее, чем с массивом строк. А потом этот массив слейте обратно в файл в виде строк.
sannee
Просто хороший человек
 Аватар для sannee
362 / 155 / 12
Регистрация: 26.04.2011
Сообщений: 421
Завершенные тесты: 2
19.02.2012, 01:06     Преобразование информции из текстового файла в двумерный массив #8
Цитата Сообщение от Max_Drovosek Посмотреть сообщение
Тоесть теперь i, j - индексы массива и спокойно можно применять волновой алгоритм?
Спасибо большое)
да, пожалуйста)
Max_Drovosek
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 01:08  [ТС]     Преобразование информции из текстового файла в двумерный массив #9
Цитата Сообщение от DU Посмотреть сообщение
вам лучше немного по другому пути пойти.

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

Теперь к лабиринту:
В файле у вас текстовое представление лабиринта. Считайте этот текст в двумерный массив чаров.
В этом массиве поменяйте значения чаров на нужные вам. Ведь работать с двумерным массивом чаров удобнее, чем с массивом строк. А потом этот массив слейте обратно в файл в виде строк.
Приятно, когда есть люди, которые грамотно и логично наталкивают на верный путь такого недотепу, как я
вот именно это я и хотел узнать - как считать текст в двумерный массив?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 01:26     Преобразование информции из текстового файла в двумерный массив #10
Ну вот как двумерный массив символов можно использовать тип
std::vector<std::string>
Его использование решит проблему неизвестного размера лабиринта.
Сохранить все назад в файл тоже будет очень просто. Так же как и в функции PrintArray. Только вместо экрана будет файловый стрим.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
typedef vector<string> CharArray2D;
 
void PrintArray(const CharArray2D& arr)
{
  for (unsigned i = 0; i < arr.size(); ++i)
    cout << arr[i] << endl;
}
 
void ProcessArray(CharArray2D& arr)
{
  // Вот тут синтаксис такой же как и при работе с двумерным массивом.
 
  for (unsigned i = 0; i < arr.size(); ++i)
  {
    for (unsigned j = 0; j < arr[i].size(); ++j)
    {
      arr[i][j] = 'a';
    }
  }
}
 
void ReadArray(CharArray2D& arr)
{
  // Вот тут вместо захардкоженного заполнение массива строками нужно по строке читать из файла
  // и пушить их в такой вот вектор. Код чтения строк из файла уже есть.
 
  CharArray2D tmp;
  tmp.push_back("123");
  tmp.push_back("456");
  tmp.push_back("789");
  arr.swap(tmp);
}
 
int main()
{
  CharArray2D arr;
  ReadArray(arr);
  PrintArray(arr);
 
  ProcessArray(arr);
  PrintArray(arr);
 
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 01:34     Преобразование информции из текстового файла в двумерный массив
Еще ссылки по теме:

Считать из текстового файла целые числа в массив C++
C++ Чтение из текстового файла массив структур
C++ Из текстового файла считать массив целых чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Max_Drovosek
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 01:34  [ТС]     Преобразование информции из текстового файла в двумерный массив #11
Сейчас буду разбираться
Спасибо огромное!!!

Добавлено через 3 минуты
Спасибо огромнейшее!!!
Yandex
Объявления
19.02.2012, 01:34     Преобразование информции из текстового файла в двумерный массив
Ответ Создать тему
Опции темы

Текущее время: 01:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru