回答編集履歴

4

0xff60以下を追加

2020/12/17 00:22

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -72,4 +72,4 @@
72
72
 
73
73
  ```
74
74
 
75
- 0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
75
+ 0x1000 以上 0xff60以下の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。

3

半角片仮名を追加

2020/12/17 00:22

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -26,7 +26,13 @@
26
26
 
27
27
  SMALL_RECT rect = { 10, 3, 49, 4 }; // left, top, right, bottom
28
28
 
29
+ wchar_t s[2][20] = {
30
+
29
- wchar_t s[2][20] = { L"abcdefgあいうえお\x3b1\x3b2\x3b3", L"日本語 English" };
31
+ L"abcdefgあいうえおαβγ",
32
+
33
+ L"日本語 English アイウエオ"
34
+
35
+ };
30
36
 
31
37
  for (int i = 0; i < 2; i++) {
32
38
 
@@ -34,7 +40,7 @@
34
40
 
35
41
  for (int j = 0; j < 20 && s[i][j]; j++) {
36
42
 
37
- if (s[i][j] < 0x1000) {
43
+ if (s[i][j] < 0x1000 || s[i][j] > 0xff60) {
38
44
 
39
45
  buf[k].Char.UnicodeChar = s[i][j];
40
46
 

2

半角文字の範囲を変更

2020/12/17 00:21

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -26,15 +26,17 @@
26
26
 
27
27
  SMALL_RECT rect = { 10, 3, 49, 4 }; // left, top, right, bottom
28
28
 
29
- wchar_t s[2][20] = { L"abcdefgあいうえお", L"日本語 English" };
29
+ wchar_t s[2][20] = { L"abcdefgあいうえお\x3b1\x3b2\x3b3", L"日本語 English" };
30
30
 
31
31
  for (int i = 0; i < 2; i++) {
32
32
 
33
- for (int k = i * 40, j = 0; s[i][j]; j++) {
33
+ int k = i * 40;
34
34
 
35
- if (s[i][j] <= 0xff) {
35
+ for (int j = 0; j < 20 && s[i][j]; j++) {
36
36
 
37
+ if (s[i][j] < 0x1000) {
38
+
37
- buf[k].Char.AsciiChar = s[i][j];
39
+ buf[k].Char.UnicodeChar = s[i][j];
38
40
 
39
41
  buf[k++].Attributes = FOREGROUND_GREEN;
40
42
 
@@ -64,4 +66,4 @@
64
66
 
65
67
  ```
66
68
 
67
- 0x0100 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
69
+ 0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。

1

コードの修正

2020/12/17 00:15

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -1,3 +1,5 @@
1
+ マルチバイト文字ではなく Unicode を使いましょう。
2
+
1
3
  ```C++
2
4
 
3
5
  #define UNICODE
@@ -28,9 +30,7 @@
28
30
 
29
31
  for (int i = 0; i < 2; i++) {
30
32
 
31
- int k = i * 40;
32
-
33
- for (int j = 0; j < 20 && s[i][j]; j++) {
33
+ for (int k = i * 40, j = 0; s[i][j]; j++) {
34
34
 
35
35
  if (s[i][j] <= 0xff) {
36
36