многомерная строка с ++ - PullRequest
0 голосов
/ 23 мая 2011

Я пишу функцию, в которой в качестве входного параметра используется двумерный массив строк.Я инициализировал строку, передал ее функции, но когда я попытался напечатать массив, ничего не произошло.Это говорит о том, что длина массива равна 0. Все мои функции хранятся в заголовочном файле.Вот мой код:

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;

int c,i,j,fx,fy;
int color,fields,rows,anim,speed;
string opt[5][50];
string popt[5][50]={
    {"caption","asdf","safd","asf"},
    {"caption1","dsafa","asdf","asdf"},
    {"caption2","asdf","asdf","asdfas"},
    {"caption3","sadfa","asdfs","fasdfa"}};

void ini(int focus_text_color, int n_fields,int n_rows, string options[][50], bool animation=false, int animation_speed=10)
{
    color=focus_text_color;
    fields=n_fields;
    for(i=1;i<fields+1;i++)
    {
        for(j=1;j<rows+1;j++)
        {
            opt[i][j]=options[i][j];
        }
    }
}

int drawh()
{
    system("cls");
    for(i=0;i<fields;i++)
    {
        for(j=0;j<rows;j++)
        {
            cout<<opt[i][j]<<setw(opt[i+1][j].length()+5);
        }
    }
    return 0; 
}

void main()
{
    ini(LIGHTRED,4,4,popt);
    drawh();
}

ПРИМЕЧАНИЕ. Это часть кода, поэтому я его не проверял, и извините за мой плохой английский: D

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Помимо комментариев @ Oli.Чтобы упростить его, вы можете передать массив по ссылке.См. Пример ниже:

template<unsigned int ROW, unsigned int COL>
void ini (string (&s)[ROW][COL])  // psuedo code for 'ini'; put extra params to enhance
{
  ini(s, ROW, COL);
}

Теперь template ini() предоставляет оболочку для фактического ini(), который вычисляет строку / столбец массива во время компиляции.Использование очень просто:

string s[10][5];
ini(s); // calls ini(s,10,5);

Ваш цикл должен начинаться с измерения 0, а не 1 для копирования.Проверьте мой подход и измените ваш код.

for(int i = 0; i < ROW; i++)
  for(int j = 0; j < COL; j++)
    s1[i][j] = s2[i][j];

Также в вашем коде много проблем из-за передачи неправильных измерений (например, передача 4 в качестве измерения при вызове ini(),когда это должно быть 5).

0 голосов
/ 23 мая 2011

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

void ini(int focus_text_color, int n_fields,int n_rows, string options[][50], bool animation=false, int animation_speed=10)
{
    color=focus_text_color;
    fields=n_fields;
    rows = n_rows;   //-- ADDED LINE
 ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...