Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

닌자고양이

[C/C++] 공백으로 구분된 정수 배열 입력 받기 (split) 본문

C C++

[C/C++] 공백으로 구분된 정수 배열 입력 받기 (split)

닌자고양이 2020. 1. 20. 13:07

개행 문자가 입력되거나 입력이 종료될 때까지 문자열을 입력 받아 공백으로 구분된 숫자들을 추출하는 예제

 

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