문제
영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.
package main
import "fmt"
func main() {
var s1 string
fmt.Scan(&s1)
// 문자를 하나씩 꺼내서
for _, s := range s1 {
문자의 아스키코드가 97보다 작으면 대문자!
if s < 97 {
// s + 32 를 해서 소문자로 출력
fmt.Print(string(s + 32))
} else {
// 나머지는 소문자, -32를 해서 대문자로 출력
fmt.Print(string(s - 32))
}
}
}
// 1. s1 aBcD 를 a, B, c, D 로 분해
// 2. a가 소문자면 대문자로 변환(-32), a가 대문자면 소문자로 변환(+32)
// 3. B가 소문자면 대문자로 변환(-32), B가 대문자면 소문자로 변환(+32)
// 4. c가 소문자면 대문자로 변환(-32), c가 대문자면 소문자로 변환(+32)
// 5. 변환한 문자열을 합쳐서 (연결해서) 출력
go 에서 string은 rune 배열

unicode-rune
for _, s := range s1 {
// 소문자인지 확인
if unicode.IsLower(s) {
// 대문자로 출력
fmt.Print(string(unicode.ToUpper(s)))
} else {
// 소문자가 아니면 소문자로 출력
fmt.Print(string(unicode.ToLower(s)))
}
}
strings - string
//fmt.Println(strings.ToLower(s1)) 전체 소문자로 출력
//fmt.Print(strings.ToUpper(s1)) 전체 대문자로 출력
for _, s := range s1 {
if unicode.IsLower(s) {
fmt.Print(strings.ToUpper(string(s)))
} else {
fmt.Print(strings.ToLower(string(s)))
}
}
package main
import "fmt"
func main() {
var s1 string
fmt.Scan(&s1)
stringCase := ""
for _, s := range s1 {
if s < 97 {
stringCase = string(s + 32)
} else {
stringCase = string(s - 32)
}
fmt.Printf("%s", stringCase)
}
}