在txt文件中查找迷宫的特定字符

时间:2015-03-01 21:10:24

标签: c++ maze

我正在尝试设置一个从文本文件中获取迷宫入口的函数,txt文件中的char是'E'。这需要用作播放器的起始位置,但我不确定如何识别文本文件中的某个字符。

这是用于读取文件并打印它的代码,但我不知道如何选择入口并为其分配值。

void Floor::printToScreen()
{
ifstream f("FloorA.txt");
string str;
int cols = 0;
int rows = 0;

char maze[20][30];

int line = 0;
while(getline(f, str)){
    const char * chars = str.c_str();
    for(int i = 0; i<str.length(); i++){
        maze[line][i] = chars[i];
    }
    cols = str.length();
    line++;
    rows++;
}
for (int i=0; i<line; i++){
    for(int j=0; j<rows; j++){
        cout << maze[i][j] << "";
    }
    cout << endl;
}
cout << "Rows: " << rows << " Columns: " << cols;
}

FloorA txt文件:

##############################
#      K                     #
#  ############## ### ###  # #
#      K    #   # #C# #K#  # #
# ######### # A # # # # #  # #
#      K    #   #          # #
# ############D#####D####### #
#                            #
#   C         G        C     #
#                            #
# ######D##############D#### #
#      #  C         #K#    # #
# #### ######## #   # #      #
# #K   #      # ### # # #### #
# # ## # #### #   # # #    # #
E # ## # #    ### # # #### # # 
# #    # #K           D    # #
# #D#### ################### #
#                    K       #
##############################

在另一篇文章中对此进行了简要讨论,但请注意不要重复,因为我仍然对实现感到困惑,所以我想在这里提出一个更具体的问题。

1 个答案:

答案 0 :(得分:1)

试试这个:

bool entrance_found = false;
unsigned int entrance_row = 0;
unsigned int entrance_column = 0;
for (row = 0; row < MAX_ROWS; row++)
{
  for (column = 0; column < MAX_COLUMNS; ++column)
  {
    if (maze[row][column] == 'E')
    {
      entrance_found = true;
      entrance_row = row;
      entrance_column = column;
      break;
    }
  }
  if (entrance_found)
  {
    break;
  }
}

这是搜索矩阵或2D数组的标准习惯用语。

注意当找到entrance_row时,入口的行和列如何保存到entrance_column'E'

变量entrance_found用于退出外循环。虽然没有必要,但确实可以节省时间。