shift-upper.go 533 B

123456789101112131415161718192021222324252627282930313233
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. var str []rune
  7. var s string
  8. _, err := fmt.Scanln(&s)
  9. for err == nil {
  10. str = []rune(s)
  11. for i, j := len(str)-1, len(str)-1; 1 <= i && 0 <= j; i-- {
  12. if isLower(str[i]) {
  13. for j = i - 1; 0 <= j && isLower(str[j]); j-- {
  14. }
  15. if j == -1 {
  16. break
  17. }
  18. for k := j + 1; k <= i; k++ {
  19. str[k-1], str[k] = str[k], str[k-1]
  20. }
  21. j--
  22. }
  23. }
  24. fmt.Println(string(str))
  25. _, err = fmt.Scanln(&s)
  26. }
  27. }
  28. func isLower(b rune) bool {
  29. return 'a' <= b && b <= 'z'
  30. }