C의 문자열에서 정수 시퀀스를 구문 분석하는 방법은 무엇입니까?

사자 별자리

안녕하세요 저는 C를 처음 접했고 문자열 줄을 정수로 구문 분석하는 방법에 대해 혼란스러워하는 문제가 있습니다. 지금까지 내가 가진 방법은 첫 번째 문자열을 정수로 구문 분석하는 것입니다. 그래서 내 입력이 있다면 10 20 30첫 번째 문자열 만 가져 와서 정수로 구문 분석합니다. 모든 줄을 읽고 .NET을 사용하여 정수 값으로 모두 구문 분석 할 수있는 솔루션을 찾는 방법에 대한 아이디어를 찾고 있습니다 getline().

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char *line = NULL;
    size_t len = 0; 
    int val =0;
    int sum = 0;

    while (getline(&line, &len, stdin) != EOF) {
    
        printf("Line input : %s\n", line);
        //printf("Test %d", val);

        //parse char into integer 
        val = atoi(line);

        printf("Parsed integer: %d\n", val);
    }
    free(line); 
    return 0;
}
조나단 레플러

주석에서 언급했듯이 문자열을 정수로 변환 하려면 strtol()(또는 strtoX()함수 계열의 다른 구성원 중 하나) 를 사용하는 것이 가장 좋습니다 . 다음은 올바른 사용법에strtol() 주의를 기울이는 코드 입니다 .

#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *line = NULL;
    size_t len = 0;

    while (getline(&line, &len, stdin) != -1)
    {
        printf("Line input : [%s]\n", line);
        int val = atoi(line);
        printf("Parsed integer: %d\n", val);

        char *start = line;
        char *eon;
        long value;
        errno = 0;
        while ((value = strtol(start, &eon, 0)),
               eon != start &&
               !((errno == EINVAL && value == 0) ||
                 (errno == ERANGE && (value == LONG_MIN || value == LONG_MAX))))
        {
            printf("%ld\n", value);
            start = eon;
            errno = 0;
        }
        putchar('\n');
    }
    free(line);
    return 0;
}

POSIX를 사용하여 줄을 읽는 질문의 코드 getline()는 거의 정확합니다. 함수에 널 포인터에 대한 포인터를 전달하고, 그러나, 기술적으로 0에 대한 포인터를 전달하는 합법적 인 getline()수익 -1보다는 EOF(있는 경우) 차이가 시스템을 거의 있기는하지만. 그럼에도 불구하고 표준 C는 EOF음수 값을 허용 합니다. 반드시이어야하는 것은 아닙니다 -1.

극한의 nitpickers를 들어,의 리눅스 및 맥 OS man 페이지 있지만 strtol()"0을 반환하고 세트 상태 errno로는 EINVAL이 문자열을 변환하는 데 실패 할 경우"필요로하지 않는 C 표준 errno이 설정됩니다. 그러나 변환이 실패 eon하면로 설정됩니다 start. 이는 표준에 의해 보장됩니다. 따라서 테스트의 일부 EINVAL가 불필요 하다고 주장 할 여지가 있습니다 .

while루프는 호출 콤마 연산자를 사용 strtol()(할당으로 그 부작용에 대한 valueeon), 그 결과를 무시 - 모든 가능한 반환 값이 유효하기 때문에 무시하는 것은 필수적이다. 조건의 다른 세 줄 (쉼표 연산자의 RHS)은 변환의 성공 여부를 평가합니다. 이렇게하면 호출을 strtol()두 번 쓰는 것을 방지 할 수 있습니다. DRY (반복하지 마세요) 프로그래밍의 극단적 인 경우 일 수 있습니다.

코드 실행의 작은 샘플 (프로그램 이름 rn89) :

$ rn89
   1  2    4  5       5  6
Line input : [   1  2    4  5       5  6
]
Parsed integer: 1
1
2
4
5
5
6

232443 432435423 12312 1232413r2  
Line input : [232443 432435423 12312 1232413r2
]
Parsed integer: 232443
232443
432435423
12312
1232413

324d
Line input : [324d
]
Parsed integer: 324
324

$

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Safari에서 moment.js의 구문 분석 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

하이브의 문자열에서 날짜를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

PHP의 문자열에서 온도를 올바르게 구문 분석하는 방법은 무엇입니까?

분류에서Dev

음수를 포함하는 문자열을 정수로 구문 분석하는 방법은 무엇입니까?

분류에서Dev

XML의 특정 필드를 C # 클래스로 구문 분석하는 방법은 무엇입니까?

분류에서Dev

Java의 문자열에서 가장 긴 문자 시퀀스를 반환하는 방법은 무엇입니까?

분류에서Dev

텍스트 버퍼에 저장된 정수 시퀀스를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

이 예제에서 SQL의 동적 구문 분석 노드를 수행하는 방법은 무엇입니까?

분류에서Dev

다음 C ++ 코드에서 인수를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

C의 사용자 제공 문자열에서 표준 이스케이프 시퀀스를 구문 분석하는 기본 제공 방법이 있습니까?

분류에서Dev

C #에서 json 배열 내부의 json 객체를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

목록의 문자열에서 정수를 분리하는 방법은 무엇입니까?

분류에서Dev

Bash의 문자열에서 채색 시퀀스를 삭제하는 방법은 무엇입니까?

분류에서Dev

Bash의 문자열에서 채색 시퀀스를 삭제하는 방법은 무엇입니까?

분류에서Dev

함수 (C ++)에 대한 문자 시퀀스를 선언하는 방법은 무엇입니까?

분류에서Dev

정규식을 사용하여 변수의 문자열 내부에서 R123 [i] 패턴을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

R에서 문자열 내의 특정 문자를 분리하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 URL 매개 변수를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

C의 문자에서 정수를 빼는 방법은 무엇입니까?

분류에서Dev

angularjs에서 개체를 선택에서 정수로 구문 분석하는 방법은 무엇입니까?

분류에서Dev

문자열에서 문자를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

십진수에서 한 번에 한 자릿수를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 불규칙한 CSV에서 문자열을 구문 분석하고 형식을 지정하는 방법은 무엇입니까?

분류에서Dev

정규식을 사용하여 문자열에서 시간 (시간, 분)을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

Python에서 문자열의 입력을 구문 분석하는 더 좋은 방법은 무엇입니까?

분류에서Dev

C에서 문자열의 특정 문자를 확인하는 방법은 무엇입니까?

분류에서Dev

Swift에서 특정 데이터를 배열로 구문 분석하는 방법은 무엇입니까?

분류에서Dev

문자열의 특정 부분에서 텍스트를 인쇄하는 방법은 무엇입니까?

분류에서Dev

0 십진수를 문자열로 구문 분석하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Safari에서 moment.js의 구문 분석 오류를 수정하는 방법은 무엇입니까?

  2. 2

    하이브의 문자열에서 날짜를 구문 분석하는 방법은 무엇입니까?

  3. 3

    PHP의 문자열에서 온도를 올바르게 구문 분석하는 방법은 무엇입니까?

  4. 4

    음수를 포함하는 문자열을 정수로 구문 분석하는 방법은 무엇입니까?

  5. 5

    XML의 특정 필드를 C # 클래스로 구문 분석하는 방법은 무엇입니까?

  6. 6

    Java의 문자열에서 가장 긴 문자 시퀀스를 반환하는 방법은 무엇입니까?

  7. 7

    텍스트 버퍼에 저장된 정수 시퀀스를 구문 분석하는 방법은 무엇입니까?

  8. 8

    이 예제에서 SQL의 동적 구문 분석 노드를 수행하는 방법은 무엇입니까?

  9. 9

    다음 C ++ 코드에서 인수를 구문 분석하는 방법은 무엇입니까?

  10. 10

    C의 사용자 제공 문자열에서 표준 이스케이프 시퀀스를 구문 분석하는 기본 제공 방법이 있습니까?

  11. 11

    C #에서 json 배열 내부의 json 객체를 구문 분석하는 방법은 무엇입니까?

  12. 12

    목록의 문자열에서 정수를 분리하는 방법은 무엇입니까?

  13. 13

    Bash의 문자열에서 채색 시퀀스를 삭제하는 방법은 무엇입니까?

  14. 14

    Bash의 문자열에서 채색 시퀀스를 삭제하는 방법은 무엇입니까?

  15. 15

    함수 (C ++)에 대한 문자 시퀀스를 선언하는 방법은 무엇입니까?

  16. 16

    정규식을 사용하여 변수의 문자열 내부에서 R123 [i] 패턴을 구문 분석하는 방법은 무엇입니까?

  17. 17

    R에서 문자열 내의 특정 문자를 분리하는 방법은 무엇입니까?

  18. 18

    자바 스크립트에서 URL 매개 변수를 구문 분석하는 방법은 무엇입니까?

  19. 19

    C의 문자에서 정수를 빼는 방법은 무엇입니까?

  20. 20

    angularjs에서 개체를 선택에서 정수로 구문 분석하는 방법은 무엇입니까?

  21. 21

    문자열에서 문자를 구문 분석하는 방법은 무엇입니까?

  22. 22

    십진수에서 한 번에 한 자릿수를 구문 분석하는 방법은 무엇입니까?

  23. 23

    자바 스크립트에서 불규칙한 CSV에서 문자열을 구문 분석하고 형식을 지정하는 방법은 무엇입니까?

  24. 24

    정규식을 사용하여 문자열에서 시간 (시간, 분)을 구문 분석하는 방법은 무엇입니까?

  25. 25

    Python에서 문자열의 입력을 구문 분석하는 더 좋은 방법은 무엇입니까?

  26. 26

    C에서 문자열의 특정 문자를 확인하는 방법은 무엇입니까?

  27. 27

    Swift에서 특정 데이터를 배열로 구문 분석하는 방법은 무엇입니까?

  28. 28

    문자열의 특정 부분에서 텍스트를 인쇄하는 방법은 무엇입니까?

  29. 29

    0 십진수를 문자열로 구문 분석하는 방법은 무엇입니까?

뜨겁다태그

보관