Загрузка данных


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

#define MAX_TEXT 101
#define MAX_WORDS 100

int s21_strlen_local(const char *str);
int is_valid_key(int argc, char *argv[]);
int read_input(int *width, char *text);
void print_width_text(char *text, int width);
int get_word_length(char *text, int pos);
void print_word_part(char *text, int *pos, int count);
void skip_spaces(char *text, int *pos);
void print_newline_if_needed(int *first_line);

int main(int argc, char *argv[]) {
    int width;
    char text[MAX_TEXT];

    if (!is_valid_key(argc, argv) || !read_input(&width, text)) {
        printf("n/a");
        return 0;
    }

    print_width_text(text, width);

    return 0;
}

int is_valid_key(int argc, char *argv[]) {
    return argc == 2 && argv[1][0] == '-' && argv[1][1] == 'w' && argv[1][2] == '\0';
}

int read_input(int *width, char *text) {
    int result = 1;

    if (scanf("%d\n", width) != 1 || *width <= 0 || fgets(text, MAX_TEXT, stdin) == NULL) {
        result = 0;
    }

    if (result) {
        int len = s21_strlen_local(text);

        if (len > 0 && text[len - 1] == '\n') {
            text[len - 1] = '\0';
        }
    }

    return result;
}

void print_width_text(char *text, int width) {
    int pos = 0;
    int line_len = 0;
    int first_line = 1;

    skip_spaces(text, &pos);

    while (text[pos] != '\0') {
        int word_len = get_word_length(text, pos);

        if (line_len == 0) {
            print_newline_if_needed(&first_line);

            if (word_len <= width) {
                print_word_part(text, &pos, word_len);
                line_len = word_len;
            } else {
                print_word_part(text, &pos, width - 1);
                putchar('-');
                line_len = width;
            }
        } else if (line_len + 1 + word_len <= width) {
            putchar(' ');
            line_len++;
            print_word_part(text, &pos, word_len);
            line_len += word_len;
        } else {
            line_len = 0;
        }

        if (line_len == width) {
            line_len = 0;
        }

        skip_spaces(text, &pos);
    }
}

int s21_strlen_local(const char *str) {
    int len = 0;

    while (str[len] != '\0') {
        len++;
    }

    return len;
}

int get_word_length(char *text, int pos) {
    int len = 0;

    while (text[pos + len] != '\0' && text[pos + len] != ' ') {
        len++;
    }

    return len;
}

void print_word_part(char *text, int *pos, int count) {
    for (int i = 0; i < count; i++) {
        putchar(text[*pos]);
        (*pos)++;
    }
}

void skip_spaces(char *text, int *pos) {
    while (text[*pos] == ' ') {
        (*pos)++;
    }
}

void print_newline_if_needed(int *first_line) {
    if (*first_line) {
        *first_line = 0;
    } else {
        putchar('\n');
    }
}