-2

関数を使用して 2 番目の配列を作成したい。ユーザーが寸法 (x,y) を入力すると、関数がそれを出力します。最初の行には数字 1,2,3...x が表示され、最初の列には文字 a、b、c、d、e....y (y は数字として与えられます) が表示されます。

たとえば、ユーザーが x=5 y=7 と入力すると、次のように出力されます。

  1 2 3 4 5 
a _ _ _ _ _
b _ _ _ _ _
c _ _ _ _ _
d _ _ _ _ _
f _ _ _ _ _
h _ _ _ _ _
i _ _ _ _ _

コードを書きましたが、文字でこれを行う方法がわかりません。

void function(int x,int y)
{ 
    char th[x][y];

    for (int i = 1; i < x; i++)
    { 
       for (int j = 1; j < y; j++)
       {
          if(i==1 )
          {
            for (int k = 1; k < x; k++)
            {
               th[i][j]=k;
            }
          }
          else if(j==1)
          {
            th[i][j]='a';
          }
          else
          {
            th[i][j]='_';
          }
          std:: cout << th[i][j] <<'\t';
       }

       cout << std::endl;
    }  
 }
4

2 に答える 2

4

文字コード表現と、'b' == 'a' + 1 (など) という事実を使用します。

ゼロベースのインデックス I があり、それを文字に変換したい場合、'a' + I を印刷するのと同じくらい簡単です。大文字にしたい場合は、'A' + I を印刷します。

また、これらのループを本当に単純化できることにも注意してください。3 つのループを入れ子にする理由はありません。最初の行 (数値の列ヘッダーを生成する) には単一の for ループが必要であり、残りの行には二重にネストされた for ループが必要です。次のような (完全にテストされていない) コード:

// print header
std::cout << ' ';
for (int i = 0; i != x; ++i)
  std::cout << ' ' << i;
std::cout << '\n';

// print body
for (int j = 0; j != y; ++j)
{
  // column leader
  std::cout << char('a' + j);

  // column body
  for (int i = 0; i != x; ++i)
    std::cout << " _";
  std::cout << "\n";
}

セルにデータを保持したいというあなたの願望をフォローアップするには、セルにスペースを割り当てる必要があります。X 列 Y 行の場合、X*Y セルが必要です。X*j+i を使用してこれらにインデックスを付けることができます。ここで、i,j はアクセスする列と行です。何かのようなもの:

std::vector<int> cells(x * y);

// inside the loop, in place of printing " _", use:
std::cout << ' ' << cells(x * j + i);

「空の」値のアンダースコアを保持したい場合は、nil 値 (ゼロ、負、INT_MAX など) を表す整数を選択し、それでベクトルを埋める必要があります。次に、セル値が nil 値の場合はアンダースコアを出力する if 条件を入力し、それ以外の場合はセル値を直接出力します。

于 2012-04-16T09:30:24.533 に答える
0

配列を動的に割り当て、完了したらメモリを解放する必要があります。

char** th = new char*[x];
for ( int i = 0 ; i < x ; i++ )
   th[i] = new char[y];

//rest of the code

for ( int i = 0 ; i < x ; i++ )
   delete[] th[i];
delete[] th;

も調べることをお勧めしstd::vectorます。実際に行っていることにより適している可能性があります。

于 2012-04-16T09:26:54.350 に答える