回答編集履歴
4
0xff60以下を追加
answer
CHANGED
@@ -35,4 +35,4 @@
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
```
|
38
|
-
0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
|
38
|
+
0x1000 以上 0xff60以下の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
|
3
半角片仮名を追加
answer
CHANGED
@@ -12,11 +12,14 @@
|
|
12
12
|
COORD bs = { 40, 2 }; // buffer size: X, Y
|
13
13
|
COORD bc = { 0, 0 }; // buffer coord: X, Y
|
14
14
|
SMALL_RECT rect = { 10, 3, 49, 4 }; // left, top, right, bottom
|
15
|
+
wchar_t s[2][20] = {
|
15
|
-
|
16
|
+
L"abcdefgあいうえおαβγ",
|
17
|
+
L"日本語 English アイウエオ"
|
18
|
+
};
|
16
19
|
for (int i = 0; i < 2; i++) {
|
17
20
|
int k = i * 40;
|
18
21
|
for (int j = 0; j < 20 && s[i][j]; j++) {
|
19
|
-
if (s[i][j] < 0x1000) {
|
22
|
+
if (s[i][j] < 0x1000 || s[i][j] > 0xff60) {
|
20
23
|
buf[k].Char.UnicodeChar = s[i][j];
|
21
24
|
buf[k++].Attributes = FOREGROUND_GREEN;
|
22
25
|
}
|
2
半角文字の範囲を変更
answer
CHANGED
@@ -12,11 +12,12 @@
|
|
12
12
|
COORD bs = { 40, 2 }; // buffer size: X, Y
|
13
13
|
COORD bc = { 0, 0 }; // buffer coord: X, Y
|
14
14
|
SMALL_RECT rect = { 10, 3, 49, 4 }; // left, top, right, bottom
|
15
|
-
wchar_t s[2][20] = { L"abcdefgあいうえお", L"日本語 English" };
|
15
|
+
wchar_t s[2][20] = { L"abcdefgあいうえお\x3b1\x3b2\x3b3", L"日本語 English" };
|
16
16
|
for (int i = 0; i < 2; i++) {
|
17
|
+
int k = i * 40;
|
17
|
-
for (int
|
18
|
+
for (int j = 0; j < 20 && s[i][j]; j++) {
|
18
|
-
if (s[i][j] <
|
19
|
+
if (s[i][j] < 0x1000) {
|
19
|
-
buf[k].Char.
|
20
|
+
buf[k].Char.UnicodeChar = s[i][j];
|
20
21
|
buf[k++].Attributes = FOREGROUND_GREEN;
|
21
22
|
}
|
22
23
|
else {
|
@@ -31,4 +32,4 @@
|
|
31
32
|
}
|
32
33
|
}
|
33
34
|
```
|
34
|
-
|
35
|
+
0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
|
1
コードの修正
answer
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
マルチバイト文字ではなく Unicode を使いましょう。
|
1
2
|
```C++
|
2
3
|
#define UNICODE
|
3
4
|
#include <windows.h>
|
@@ -13,8 +14,7 @@
|
|
13
14
|
SMALL_RECT rect = { 10, 3, 49, 4 }; // left, top, right, bottom
|
14
15
|
wchar_t s[2][20] = { L"abcdefgあいうえお", L"日本語 English" };
|
15
16
|
for (int i = 0; i < 2; i++) {
|
16
|
-
int k = i * 40;
|
17
|
-
for (int
|
17
|
+
for (int k = i * 40, j = 0; s[i][j]; j++) {
|
18
18
|
if (s[i][j] <= 0xff) {
|
19
19
|
buf[k].Char.AsciiChar = s[i][j];
|
20
20
|
buf[k++].Attributes = FOREGROUND_GREEN;
|