Как напечатать строку на основе позиции в c? - PullRequest
0 голосов
/ 30 января 2020

Я работаю над вопросом, который требует, чтобы я напечатал строку с field-number в этой позиции. Строки следует читать из файла.

file.txt

C is a language.
lex lexical analyser
(blank line)
      gcc is good

Если field-number равно 2 (т.е. второе слово в предложении). Программа должна вывести

is
lexical
(NULL)
is

Я написал функцию, но не думаю, что она верна и что она будет работать во всех случаях. Он должен обрабатывать лишние пробелы или переводы строк.

while (fgets(buffer, MAX, file) != NULL) {
    for (int i = 1; i < strlen(buffer); i++) {
        if (count == field_number - 1) {
            int j = i;
            while (j < strlen(buffer) && buffer[j] != ' ') {
                printf("%c", buffer[j++]);
            }
            printf("\n");
            count = 0;
            break;
        }

        if (buffer[i] == ' ' && buffer[i - 1] != ' ') {
            count++;
        }
    }
}

Я новичок. Этот код должен быть легким для понимания.

1 Ответ

0 голосов
/ 30 января 2020

Это должно работать для всех случаев,

int main() {
    //FILE* file = fopen(__FILE__, "r");
    //int field_number = 2;

    int new_line = 0; // var to keep track of new line came or not
    int word = 0;
    int count = 0;
    char c, prev_c;
    while ((c = fgetc(file)) != EOF) {
        // printf("[%c]", c);
        // if a new line char comes it means you entered a new line
        if(c == '\n') {
            // you have to print the new line here on the output to handle
            // empty line cases
            printf("\n");
            new_line = 1; // when line changes
            word = 0; // no word has come in this new line so far
            count = 0;    // count becomes 0
        } else if( c == ' ' && prev_c != ' ') {
            if(word)
                count++;
            if(count == field_number) // if count exceeds field_number
                new_line = 0; // wait till next line comes
        } else if (new_line && count == field_number - 1) {
            printf("%c", c);
        } else {
            word = 1; // fi a not new line or non space char comes, a word has come
        }
        prev_c = c;
    }
    return 0;
}
...