ASCII 字符数组

Array of ASCII characters

我正在尝试制作一个包含所有 32-255 个 ASCII 字符的数组,但我真的不认为这是我创建的数组?

int main()
{
    cout << " ASCII 32 - 255\n";

    int col = 1;                                        

    for (int asc_char = 32; asc_char < 256; asc_char++) 
    {
        cout << std::setw(6) << asc_char << setw(3) << static_cast<char>(asc_char);

        col++;
        if (col > 7)                                    
        {
            col = 1; 
        }
    cout << "\n";

    return 0;
}

更新:

这就是我的代码现在的样子。 ASCII table 出现在一个数组中,但不是 7 列和 32 行。每个字符前的32,33,34,35,36也没有了

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

int main()
{
    cout << " ASCII 32 - 255\n";

    unsigned char myarray[7][32] = {};
    int val = 32;
    {

        for (size_t i = 0; i < 7; i++) {
            for (size_t j = 0; j < 32; j++) {
                myarray[i][j] = val++;
            }
        }
    }
    // for (int asc_char = 32; asc_char < 256; asc_char++)
    //  cout << std::setw(6) << asc_char << setw(3) << static_cast<char>(asc_char);
     for (auto& row : myarray) {
         for (auto& col : row) {
             std::cout << col << ' ';
         }
         std::cout << '\n';
     }

        return 0;
    }

使 unsigned char 的二维数组能够容纳大于 127 的值。然后递增辅助变量并赋值:

int main() {
    unsigned char myarray[7][32] = {};
    int val = 32;
    for (size_t i = 0; i < 7; i++) {
        for (size_t j = 0; j < 32; j++) {
            myarray[i][j] = val++;
        }
    }
}

或者按照 @user0042 的建议使用 std::array 包装器的 C++ 方式:

#include <iostream>
#include <array>

int main() {
    std::array<std::array<unsigned char, 7>, 32> myarray;
    int val = 32;
    for (auto& row : myarray) {
        for (auto& el : row) {
            el = val++;
        }
    }
}

要打印出来使用:

for (auto& row : myarray) {
    for (auto& el : row) {
        std::cout << static_cast<int>(el) << ' ' << static_cast<char>(el) << ' ';
    }
    std::cout << '\n';
}

请注意,并非所有字符 are printable

参考:

How in earth can a make an array of 7 columns and 32 rows and fill it with the content of all 32-255 ASCII chars?

您可以按如下方式进行:

#include <iostream>
#include <array>

int main() {
    std::array<std::array<unsigned char,7>,32> myarray;
    unsigned char val = 32;
    for (auto& row : myarray) {
        for (auto& col : row) {
            col = val++;
        }
    }
}

关于输出table中的内容,你可能想用这个:

for (auto& row : myarray) {
    for (auto& col : row) {
        std::cout << std::setw(6) << std::right << static_cast<int>(col) 
                  << std::setw(3) << std::right << static_cast<char>(col);
    }
    std::cout << std::endl;
}

这是完整的工作 Live Demo


您将从上面获得的输出如下所示:

    32       33  !    34  "    35  #    36  $    37  %    38  &
    39  '    40  (    41  )    42  *    43  +    44  ,    45  -
    46  .    47  /    48  0    49  1    50  2    51  3    52  4
    53  5    54  6    55  7    56  8    57  9    58  :    59  ;
    60  <    61  =    62  >    63  ?    64  @    65  A    66  B
    67  C    68  D    69  E    70  F    71  G    72  H    73  I
    74  J    75  K    76  L    77  M    78  N    79  O    80  P
    81  Q    82  R    83  S    84  T    85  U    86  V    87  W
    88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^
    95  _    96  `    97  a    98  b    99  c   100  d   101  e
   102  f   103  g   104  h   105  i   106  j   107  k   108  l
   109  m   110  n   111  o   112  p   113  q   114  r   115  s
   116  t   117  u   118  v   119  w   120  x   121  y   122  z
   123  {   124  |   125  }   126  ~   127     128  �   129  �
   130  �   131  �   132  �   133  �   134  �   135  �   136  �
   137  �   138  �   139  �   140  �   141  �   142  �   143  �
   144  �   145  �   146  �   147  �   148  �   149  �   150  �
   151  �   152  �   153  �   154  �   155  �   156  �   157  �
   158  �   159  �   160  �   161  �   162  �   163  �   164  �
   165  �   166  �   167  �   168  �   169  �   170  �   171  �
   172  �   173  �   174  �   175  �   176  �   177  �   178  �
   179  �   180  �   181  �   182  �   183  �   184  �   185  �
   186  �   187  �   188  �   189  �   190  �   191  �   192  �
   193  �   194  �   195  �   196  �   197  �   198  �   199  �
   200  �   201  �   202  �   203  �   204  �   205  �   206  �
   207  �   208  �   209  �   210  �   211  �   212  �   213  �
   214  �   215  �   216  �   217  �   218  �   219  �   220  �
   221  �   222  �   223  �   224  �   225  �   226  �   227  �
   228  �   229  �   230  �   231  �   232  �   233  �   234  �
   235  �   236  �   237  �   238  �   239  �   240  �   241  �
   242  �   243  �   244  �   245  �   246  �   247  �   248  �
   249  �   250  �   251  �   252  �   253  �   254  �   255  �

注意终端上打印的 个字符,表示大于 126 的值。这些取决于选择用于显示的代码页(例如特殊拉丁字符,如 íêüö 等)。

您的代码对于 32 行和 7 列几乎是正确的。你没有把 cout 放在正确的位置。

for (int asc_char = 32; asc_char < 256; asc_char++) 
{
    cout << std::setw(6) << asc_char << setw(3) << static_cast<char>(asc_char);

    col++;
    if (col > 7)                                    
    {
        cout << "\n";
        col = 1; 
    }
}