가변 길이의 정수 행을 단계별로 실행

존 스미스

나는 이와 같은 약간의 파일을 읽으려고합니다 ...

52 12 123 1
4 2 11 
9 88 1 23 42

그리고 파일은 각 줄이 변경되면서 계속됩니다. fscanf와 함께 루프를 사용하여 각 숫자를 개별적으로 읽는 방법을 알고 있지만 첫 번째 숫자를 트리의 부모로 읽고 나머지 줄은 자식으로 읽고 싶습니다. 그래서 이것은 52, 4, 9가 부모가되는 3 개의 나무를 만들 것입니다. 나머지 줄을 읽고 각 정수를 적절한 트리에 추가하려면 어떻게해야합니까? 나는 이것을 c로 코딩하고 있습니다.

데이비드 C. 랭킨

한 줄씩 읽은 다음 줄 입력을 정수로 구문 분석하면 좀 더 유연하게 사용할 수 있습니다. 포인터를 사용하여 널 종결자를 찾을 때까지 행을 단계별로 이동하면 행당 다른 정수 수를 수용 할 수 있습니다. 다음은 제공된 샘플 입력에 대해 좋은 작업을 수행하는 솔루션에 대한 빠른 해킹입니다. 코드는 다음과 같습니다.

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

int
main (int argc, char *argv[]) {

    if (argc < 2 ) {
        fprintf (stderr, "Error: insufficient input, usage: %s char *fname\n", argv[0]);
        return 1;
    }

    FILE *file;
    char *lineptr = NULL;
    char *sptr = NULL, *eptr = NULL;
    size_t n = 0;
    ssize_t len = 0;
    int cnt = 0;
    int parent = 1;

    if ((file = fopen (argv[1], "r")) == NULL) {
        fprintf (stderr, "Error: file open failed for '%s'\n", argv[1]);
        return 1;
    }

    while ((len = getline (&lineptr, &n, file)) != -1 ) {
        /* strip newline */
        if (*(lineptr+len-1) == '\n') {
            *(lineptr+len-1) = '\0';
            len -= 1;
        }

        /* test output of line to parse */
        printf ("\nLine [%2d]: \"%s\"\n\n", cnt, lineptr);

        /* parse line into integers */
        parent = 1;
        sptr = NULL;
        eptr = lineptr;
        while (*eptr != '\0') {
            if (*eptr != ' ' && sptr == NULL) {
                sptr = eptr;
                eptr++;
            }
            while (*eptr != ' ' && *eptr != '\0') {
                eptr++;
            }

            if (*eptr == '\0') {
                printf ("  add to tree: %d\n", atoi (sptr));
                break;
            }

            if (*eptr == ' ' && sptr != NULL) {
                *eptr = '\0';
                if (parent) {
                    printf ("  add to tree: %d  (parent)\n", atoi (sptr));
                    parent = 0;
                } else {
                    printf ("  add to tree: %d\n", atoi (sptr));
                }
                *eptr = ' ';
                sptr = NULL;
            }

            eptr++;
        }
        cnt++;
    }

    printf ("\nTotal lines parsed: %d\n\n", cnt);

    return 0;
}

샘플 데이터의 출력은 다음과 같습니다.

Line [ 0]: "   52 12 123 1"

add to tree: 52  (parent)
add to tree: 12
add to tree: 123
add to tree: 1

Line [ 1]: "   4 2 11"

add to tree: 4  (parent)
add to tree: 2
add to tree: 11

Line [ 2]: "   9 88 1 23 42"

add to tree: 9  (parent)
add to tree: 88
add to tree: 1
add to tree: 23
add to tree: 42

Total lines parsed: 3

더 빠른 방법이 있다고 확신하지만 단순히 포인터가있는 줄을 단계별로 실행하면 문자열 함수 호출에 필요한 상당한 오버 헤드가 제거됩니다. 어떤 유형의 트리를 고려하고 있는지는 모르겠지만이 코드는 현재 printfs가있는 곳에 삽입 루틴을 추가하는 쉬운 방법을 제공합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

실행 시간에 길이가 정의 된 정수 배열

분류에서Dev

기호가로드 된 Nuget 라이브러리를 단계별로 실행할 수 없습니다.

분류에서Dev

env 및 단계가 지정된 환경 변수로 실행되지 않는 Jenkins 파이프 라인

분류에서Dev

누군가이 기능이 수행하는 작업을 단계별로 설명 할 수 있습니까?

분류에서Dev

매개 변수 값을 기반으로 빌드 단계 실행

분류에서Dev

입력을 기반으로 함수의 특정 단계를 실행하는 Python

분류에서Dev

TestNG로 오이 실행-정의되지 않은 단계가 있습니다.

분류에서Dev

매개 변수화 된 트리거 단계의 데이터를 쉘 단계 실행으로 피드

분류에서Dev

프로그램의 실행 시간을 비트 단위의 길이로 결정합니까?

분류에서Dev

BUT의 단계 정의없이 실행

분류에서Dev

실행 계획의 실행 수 이해

분류에서Dev

input () 대신 버튼으로 함수를 단계별로 실행

분류에서Dev

특정 길이의 실행 연장

분류에서Dev

문자열 형식의 수학 방정식을 Python3에서 실행 가능한 것으로 변환

분류에서Dev

테이블 행을 동적으로 추가하고 행별로 계산을 수행하는 방법

분류에서Dev

오이-단계 정의 파일을 실행할 수 없습니다.

분류에서Dev

해시를 단계별로 실행하여 각 단계에서 값을 업데이트하는 가장 관용적 인 Ruby 방법은 무엇입니까?

분류에서Dev

파이썬은 정수가 아닌 행을 삭제하고 정수로 변환

분류에서Dev

고정 열이있는 가변 개수의 행을 복사하는 매크로

분류에서Dev

길이가 n 인 문자열을 nx len (알파벳)의 행렬로 변환

분류에서Dev

(VBA) 수천 개의 행이있는 Excel-가변 길이 열을 행으로 바꾸는 방법은 무엇입니까?

분류에서Dev

파이썬 df의 총 수가 아닌 순서로 값이 동일한 "실행"의 길이를 계산하고 싶습니다.

분류에서Dev

두 파이썬 클래스 인스턴스 간의 합계를 수행하고 모든 인스턴스 변수의 길이 목록을 가져 오는 방법

분류에서Dev

전체 길이 열을 R의 한 행에있는 하나의 변수로 변환

분류에서Dev

JavaScript의 가변 길이 인수 배열에서 함수를 실행할 수 없습니다.

분류에서Dev

첫 번째 값에서 특정 길이 및 샘플의 연속 정수 실행 가져 오기

분류에서Dev

표시 할 길이가 정의 된 하나의 파일에있는 행 수 계산

분류에서Dev

표시 할 길이가 정의 된 하나의 파일에있는 행 수 계산

분류에서Dev

별칭으로 OS X 명령이 실패하고 '9:13 : 실행 오류 : 변수 Base가 정의되지 않았습니다. (-2753) '

Related 관련 기사

  1. 1

    실행 시간에 길이가 정의 된 정수 배열

  2. 2

    기호가로드 된 Nuget 라이브러리를 단계별로 실행할 수 없습니다.

  3. 3

    env 및 단계가 지정된 환경 변수로 실행되지 않는 Jenkins 파이프 라인

  4. 4

    누군가이 기능이 수행하는 작업을 단계별로 설명 할 수 있습니까?

  5. 5

    매개 변수 값을 기반으로 빌드 단계 실행

  6. 6

    입력을 기반으로 함수의 특정 단계를 실행하는 Python

  7. 7

    TestNG로 오이 실행-정의되지 않은 단계가 있습니다.

  8. 8

    매개 변수화 된 트리거 단계의 데이터를 쉘 단계 실행으로 피드

  9. 9

    프로그램의 실행 시간을 비트 단위의 길이로 결정합니까?

  10. 10

    BUT의 단계 정의없이 실행

  11. 11

    실행 계획의 실행 수 이해

  12. 12

    input () 대신 버튼으로 함수를 단계별로 실행

  13. 13

    특정 길이의 실행 연장

  14. 14

    문자열 형식의 수학 방정식을 Python3에서 실행 가능한 것으로 변환

  15. 15

    테이블 행을 동적으로 추가하고 행별로 계산을 수행하는 방법

  16. 16

    오이-단계 정의 파일을 실행할 수 없습니다.

  17. 17

    해시를 단계별로 실행하여 각 단계에서 값을 업데이트하는 가장 관용적 인 Ruby 방법은 무엇입니까?

  18. 18

    파이썬은 정수가 아닌 행을 삭제하고 정수로 변환

  19. 19

    고정 열이있는 가변 개수의 행을 복사하는 매크로

  20. 20

    길이가 n 인 문자열을 nx len (알파벳)의 행렬로 변환

  21. 21

    (VBA) 수천 개의 행이있는 Excel-가변 길이 열을 행으로 바꾸는 방법은 무엇입니까?

  22. 22

    파이썬 df의 총 수가 아닌 순서로 값이 동일한 "실행"의 길이를 계산하고 싶습니다.

  23. 23

    두 파이썬 클래스 인스턴스 간의 합계를 수행하고 모든 인스턴스 변수의 길이 목록을 가져 오는 방법

  24. 24

    전체 길이 열을 R의 한 행에있는 하나의 변수로 변환

  25. 25

    JavaScript의 가변 길이 인수 배열에서 함수를 실행할 수 없습니다.

  26. 26

    첫 번째 값에서 특정 길이 및 샘플의 연속 정수 실행 가져 오기

  27. 27

    표시 할 길이가 정의 된 하나의 파일에있는 행 수 계산

  28. 28

    표시 할 길이가 정의 된 하나의 파일에있는 행 수 계산

  29. 29

    별칭으로 OS X 명령이 실패하고 '9:13 : 실행 오류 : 변수 Base가 정의되지 않았습니다. (-2753) '

뜨겁다태그

보관