Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
1

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

19.02.2012, 00:12. Просмотров 2450. Ответов 10
Метки нет (Все метки)

Есть такая задачка
В visual studio 2008 на С++ нужно рассчитать кратчайший путь от точки к точке в лабиринте. Лабиринт задается в текстовом файле, где ####- границы, пробелы - свободные клетки, а буквы А и В - начало и конец соответственно. Кратчайший путь заполняется точками.
Хочу применить волновой алгоритм, но в текстовом файле...
Вот и главный вопрос: если я могу в горизонтальной строке переходить между клетками, то как можно вертикально переходить между строками? Типа преобразовать текст в двумерный массив, чтобы можно было двумя счетчиками определять колнку и строчку
Это возможно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2012, 00:12
Ответы с готовыми решениями:

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

Запись из текстового файла в двумерный массив
В файле записано несколько строк, в которых через запятую указано: ИМЯ, число1, число2, число3 ...

Чтение из текстового файла строки и преобразование ее в массив
'Процедура открытия и вывода текстового файла в лист бокс. Sub OpenFile(ByVal FileName As...

Чтение из текстового файла строки и преобразование ее в массив
Чтение из текстового файла строки и преобразование ее в массив

10
Эксперт С++
4708 / 2533 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
19.02.2012, 00:28 2
Max_Drovosek, покажите пример что у Вас записано в файле?
0
Просто хороший человек
386 / 176 / 24
Регистрация: 26.04.2011
Сообщений: 432
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++;
}
0
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 00:48  [ТС] 4
Примера нету сейчас нормального, чуть позже смогу выложить
0
Просто хороший человек
386 / 176 / 24
Регистрация: 26.04.2011
Сообщений: 432
19.02.2012, 00:53 5
Цитата Сообщение от Max_Drovosek Посмотреть сообщение
##############
# # .......#
# A # .#####.#
# .....# ##.#
######### #..#
# B#.##

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

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

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

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

Теперь к лабиринту:
В файле у вас текстовое представление лабиринта. Считайте этот текст в двумерный массив чаров.
В этом массиве поменяйте значения чаров на нужные вам. Ведь работать с двумерным массивом чаров удобнее, чем с массивом строк. А потом этот массив слейте обратно в файл в виде строк.
Приятно, когда есть люди, которые грамотно и логично наталкивают на верный путь такого недотепу, как я
вот именно это я и хотел узнать - как считать текст в двумерный массив?
0
DU
1492 / 1138 / 165
Регистрация: 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;
}
1
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 9
19.02.2012, 01:34  [ТС] 11
Сейчас буду разбираться
Спасибо огромное!!!

Добавлено через 3 минуты
Спасибо огромнейшее!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2012, 01:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ввод данных в двумерный массив из текстового файла
Есть двумерный маcсив из целых чисел: В каждой строке по 4 числа. Число строк не более 50-ти. ...

Считать текст из текстового файла в двумерный массив
В общем есть файл с зарплатами 10 человек за 12 месяцев, нужно как то считать его оттуда, что бы он...

Занесение информации из текстового файла в двумерный массив
Доброго времени суток! Каким образом можно занести информацию из тестового файла в двумерный...

Прочитать из текстового файла двумерный массив данных
Уважаемые господа! Стоит следующая производственная задача: прочитать из текстового файла...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.