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

質問編集履歴

1

添削

2017/11/03 20:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,13 +4,17 @@
4
4
  という文字列があったとします。
5
5
  この中から100という数字を探して、**int型**として抜き出したいです。
6
6
 
7
+ 与えられる文字列の条件としては
8
+ ・かならず 100時間 や 20分 のように数字+文字列の形となっています。
9
+ ・必ず数字、文字列の順番です
10
+
7
11
  #やったこと
8
12
  **unicode.IsDigit()**にruneを渡せば判断できるようなので、それを使って関数を書いてみましたが...
9
-
13
+ [https://play.golang.org/p/wrhXOE2aOD](https://play.golang.org/p/wrhXOE2aOD)
10
14
  ```go
11
15
  func main() {
12
16
  factor := "100時間"
13
- i := numCheck(a)
17
+ i := numCheck(factor)
14
18
  fmt.Println(i) //output: 64469
15
19
  }
16
20
 
@@ -26,5 +30,25 @@
26
30
  ```
27
31
 
28
32
  これではint32の値しかわかりません。
33
+ このint32の値をintに変換するか、もしくはnumCheckの判別方法を根本的に変えないといけません。
29
34
 
30
- int32の値intに変換するか、もくはnumCheckの判別方法を根本的に変えないといせん
35
+ もちろん、文字列区切り微調整つつ**strconv.Atoi()**返り値で断するというようなこともでき
36
+ 以下例
37
+ [https://play.golang.org/p/jR2zEwqr3I](https://play.golang.org/p/jR2zEwqr3I)
38
+
39
+ ```go
40
+ func numCheck(factor string) int {
41
+ var i = 0
42
+ for {
43
+ res, _ := strconv.Atoi(factor)
44
+ if res != 0 {
45
+ return res
46
+ } else {
47
+ factor = factor[:len(factor) - i]
48
+ }
49
+ i ++
50
+ }
51
+ }
52
+
53
+ ```
54
+ 正直どちらもくどいので、何かスマートな方法を探しています。