닌자고양이
[C/C++] 공백으로 구분된 정수 배열 입력 받기 (split) 본문
개행 문자가 입력되거나 입력이 종료될 때까지 문자열을 입력 받아 공백으로 구분된 숫자들을 추출하는 예제
1. string.h 의 gets_s, strtok 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], *s;
int num[100], i, cnt = 0;
gets_s(str);
for (s = strtok(str, " "); s; s = strtok(NULL, " "), cnt++) // strtok 에 구분자 지정
if (sscanf(s, "%d", &num[cnt]) < 1)
break;
for (i = 0; i < cnt; i++)
printf("%d\n", num[i]);
}
입력:
1 2 34 567
출력:
1
2
34
567
정수와 공백이 아닌 문자를 무시하고 계속 검색하려면
for (s = strtok(str, " "); s; s = strtok(NULL, " "))
if (sscanf(s, "%d", &num[cnt]) > 0)
cnt++;
2. stdio.h 의 scanf, sscanf 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char str[100];
int num[100], i, cnt = 0;
scanf("%[^\n]", str); // gets_s(str) 와 동일
for (i = 2; i > 1; cnt += i > 0)
i = sscanf(str, "%d%*[ ]%[^\n]", &num[cnt], str);
for (i = 0; i < cnt; i++)
printf("%d\n", num[i]);
}
입력:
1 2 34 567
출력:
1
2
34
567
%d%[^\n] 포맷을 쓰면 모든 종류의 공백 문자로 구분한다. (띄어쓰기, \r, \n, \t, \v, \f 등)
%d%*[,]%[^\n] 포맷을 쓰면 쉼표로 구분한다.
%d%*[^-0-9]%[^\n] 포맷을 쓰면 정수와 공백이 아닌 문자를 무시하고 계속 검색한다.
(여기서 \n은 문자열 끝까지 검색하도록 발견되지 않을 임의의 문자를 지정한 것. \0 등의 제어 문자도 가능)
'C C++' 카테고리의 다른 글
[C/C++] UTF-8 텍스트 파일 읽는 방법들 (0) | 2020.09.18 |
---|---|
[C/C++] 중간값 구하기 mid(a, b, c) (0) | 2020.09.09 |
[C/C++] 콘솔에 확장 아스키 문자 출력 (0) | 2019.12.04 |
[C/C++] ctrl+c 감지하기 (0) | 2019.12.03 |
[C/C++] 369 (0) | 2019.10.31 |
Comments