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;
}
}
我正在尝试制作一个包含所有 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;
}
}