我正在尝试制作一个包含所有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表以数组形式出现,但不在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;
}
答案 0 :(得分:2)
参考OP's comment:
如何制作一个包含7列和32行的数组,并用所有32-255个ASCII字符的内容填充它?
您可以按照以下方式执行此操作:
#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++;
}
}
}
关于输出表中的内容,您可能想要使用它:
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
。这些取决于选择用于显示的代码页(例如,í
,ê
,ü
,ö
等特殊拉丁字符。)
答案 1 :(得分:1)
使unsigned char
的2D数组能够保存大于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。
答案 2 :(得分:0)
对于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;
}
}