teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

0xff60以下を追加

2020/12/17 00:22

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -35,4 +35,4 @@
35
35
  }
36
36
  }
37
37
  ```
38
- 0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
38
+ 0x1000 以上 0xff60以下の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。

3

半角片仮名を追加

2020/12/17 00:22

投稿

kazuma-s
kazuma-s

スコア8222

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
- wchar_t s[2][20] = { L"abcdefgあいうえお\x3b1\x3b2\x3b3", L"日本語 English" };
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

半角文字の範囲を変更

2020/12/17 00:21

投稿

kazuma-s
kazuma-s

スコア8222

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 k = i * 40, j = 0; s[i][j]; j++) {
18
+ for (int j = 0; j < 20 && s[i][j]; j++) {
18
- if (s[i][j] <= 0xff) {
19
+ if (s[i][j] < 0x1000) {
19
- buf[k].Char.AsciiChar = s[i][j];
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
- 0x0100 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。
35
+ 0x1000 以上の文字が全部全角文字と考えるのは無茶ですが、とりあえず動くでしょう。

1

コードの修正

2020/12/17 00:15

投稿

kazuma-s
kazuma-s

スコア8222

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 j = 0; j < 20 && s[i][j]; j++) {
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;