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

回答編集履歴

3

出力例と注意点追記

2020/07/07 05:31

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -33,8 +33,9 @@
33
33
 
34
34
  ## 追記
35
35
 
36
- Goでは文字列を `for ... range` の構文に載せると、文字単位のインデックスとruneをイテレートします。
36
+ Goでは文字列を `for ... range` の構文に載せると、文字のインデックスとruneをイテレートします。
37
37
  このことは知っておくと競技の際に有効に使える(もしくは罠にはまらない)ので参考にしてください。
38
+ (indexの値が+1ずつの数列ではないことに注意)
38
39
 
39
40
  [https://play.golang.org/p/RjbrAJKW1DG](https://play.golang.org/p/RjbrAJKW1DG)
40
41
  ```go
@@ -50,4 +51,33 @@
50
51
  fmt.Printf("%d:%q\n", index, r)
51
52
  }
52
53
  }
54
+ ```
55
+
56
+ 出力例
57
+ ```
58
+ 0:'H'
59
+ 1:'e'
60
+ 2:'l'
61
+ 3:'l'
62
+ 4:'o'
63
+ 5:','
64
+ 6:' '
65
+ 7:'p'
66
+ 8:'l'
67
+ 9:'a'
68
+ 10:'y'
69
+ 11:'g'
70
+ 12:'r'
71
+ 13:'o'
72
+ 14:'u'
73
+ 15:'n'
74
+ 16:'d'
75
+ 17:' '
76
+ 18:'G'
77
+ 21:'o'
78
+ 24:'l'
79
+ 27:'a'
80
+ 30:'n'
81
+ 33:'g'
82
+ 36:'!'
53
83
  ```

2

競技プログラミング向け情報追記

2020/07/07 05:31

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -29,4 +29,25 @@
29
29
  s := "HELLO_WORLD\n"
30
30
  fmt.Println(strings.Map(my_to_lower, s))
31
31
  }
32
+ ```
33
+
34
+ ## 追記
35
+
36
+ Goでは文字列を `for ... range` の構文に載せると、文字単位のインデックスとruneをイテレートします。
37
+ このことは知っておくと競技の際に有効に使える(もしくは罠にはまらない)ので参考にしてください。
38
+
39
+ [https://play.golang.org/p/RjbrAJKW1DG](https://play.golang.org/p/RjbrAJKW1DG)
40
+ ```go
41
+ package main
42
+
43
+ import (
44
+ "fmt"
45
+ )
46
+
47
+ func main() {
48
+ s := "Hello, playground Golang!"
49
+ for index, r := range s {
50
+ fmt.Printf("%d:%q\n", index, r)
51
+ }
52
+ }
32
53
  ```

1

補足事項追記

2020/07/07 05:26

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -1,3 +1,9 @@
1
+ いちおうGoの作法として、文字単位での処理には`int`ではなく`rune`を使います。
2
+ `rune`はUCS-4というエンコードの1文字4バイト表現の型です(int32と変換可能)。
3
+
4
+ Goの文字列はUTF-8というエンコードで格納されていますのでインデックスアクセスはあまりお勧めしません。
5
+ (全角文字にたいして同様に小文字への変換を行う時に困ると思います)
6
+
1
7
  当初の趣旨とは異なるかもしれませんが、
2
8
  そういった処理を支援する機能がstringsパッケージにあります。
3
9
  ご参考に。