오늘은 stdin 으로 입력을 받아
중복되는 입력의 카운트를 출력해 주는 프로그램을 작성하였습니다.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
counts := make(map[string]int)
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
counts[input.Text()]++
if input.Text() == "" {
break
}
}
for line, n := range counts {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
}
코드를 보면서 설명을 드리자면
우선 표준입출력을 받아오기 위해서 bufio 패키지를 사용하였습니다.
bufio에 대한 자세한 내용은 아래를 참고하셔도 좋을 것 같습니다.
https://pkg.go.dev/bufio#Scanner.Scan
반응형
bufio 패키지를 통해 입력되는 데이터를 counts 맵의 키로 사용하여 카운트를 하나씩 올려 줍니다.
같은 입력이 들어오면 해당 key의 value 가 1 씩 증가하도록 작성한 코드입니다.
for input.Scan() 구문으로 시작하는 루프에서
입력이 empty ( "" ) 인 경우에 해당 루프를 탈출하도록 작성하였습니다.
stdin으로 터미널에서 입력을 하다가
아무 값도 입력을 하지 않으면
그 동안 입력 된 값들 중 중복 된 데이터의 카운트를 출력하는 프로그램이 되겠습니다.
실제 실행 예시는 다음을 참고하시죠.
> ./dup1
123
123
321
321
123321
3323
a
b
c
abcde
ab
b
2 321
2 b
2 123
아래 출력을 보면 두번 이상 반복 된 stdin 을 반복 카운트와 함께 출력해주는 것을 보실 수 있습니다.
이번에는 그저 터미널에서 입력되는 stdin값 이었지만, 다음에는 파일로도 이런 중복체크 프로그램을 만들어 보도록 하겠습니다.
감사합니다.
wh.
'CS > Go' 카테고리의 다른 글
[Go programming] Requesting http get method to an url from an argument (0) | 2023.06.24 |
---|---|
[Go언어연습] 중복 된 내용이 있는 파일명 리스트를 출력하는 프로그램 (0) | 2023.06.06 |
[Go언어기초] go 언어 반복문, for 문 사용하기 (0) | 2023.05.07 |
[프로그래밍 언어] Go 언어 기초 - 커맨드라인 인수와 os.Args 변수 (0) | 2023.05.01 |
[프로그래밍 언어] Go 언어 시작하기, 환경설정 - Hello world (0) | 2023.04.30 |