Golangで文字列変換の問題を解く
前回同様、AOJの問題を解いてみます。 yuki-toida.hatenablog.com
文字列変換の問題をやってみた
問題
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/9/ITP1_9_D
自分が書いたコードはこちら
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) // 文字列変換 func main() { sc := bufio.NewScanner(os.Stdin) sc.Scan() str := sc.Text() sc.Scan() q, _ := strconv.Atoi(sc.Text()) for i := 0; i < q; i++ { sc.Scan() ary := strings.Split(sc.Text(), " ") a, _ := strconv.Atoi(ary[1]) b, _ := strconv.Atoi(ary[2]) switch ary[0] { case "replace": str = str[:a] + ary[3] + str[b+1:] case "reverse": str = str[:a] + reverse(str[a:b+1]) + str[b+1:] case "print": fmt.Printf("%v\n", str[a:b+1]) } } } func reverse(s string) string { runes := []rune(s) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = runes[j], runes[i] } return string(runes) }
AOJからのフィードバック
Golangのスライスの部分取得が便利だったので抜粋。
str[:] // 0 から len(str)-1 まで str[a:] // a から len(str)-1 まで str[a:b] // a から b-1 まで str[:a] // 0 から aまで
これはとても分かりやすく良いですね、使っていこう。