печать строки в указанном формате c - PullRequest
1 голос
/ 04 мая 2020

Итак, я создал программу, которая в основном печатает любую заданную строку следующим образом:

Пример: Ввод:

Hello

Вывод:

Hello
ello
llo
lo
o

Проблема по какой-то причине, если я использую icdiff и сравниваю свой вывод с этим выводом в текстовом файле, это говорит о том, что я пропускаю элементы и у меня больше пробелов, чем должно быть.

Вывод Icdiff:

Hello
 ello
  llo

Как вы можете видеть, это явно отличается от того, что у меня есть, но если я проверю его на терминале, я получу ожидаемый результат.

Программа:

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

void print_array(char *p, int tamanho) {
    int i;
    for (i = 0; i < tamanho; i++) {
        printf("%c", p[i]);
    }
    printf("\n");
}

void nova_str(char *p, char *s, int inicio, int tamanho) {
    int i;
    for (i = inicio; i < tamanho; i++) {
        s[i] = p[i];
    }
}

int main() {
    char p[1001];
    int len;
    int j;
    scanf("%s", p);
    len = strlen(p);
    print_array(p, len);
    for (j = 1; j < len; j++) {
        char *np = (char *)calloc(len + 1, sizeof(char));
        nova_str(p, np, j, len);
        print_array(np, len);
        free(np);
    }
    return 0;
}

На самом деле любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Проблема в функции nova_str: вы используете один и тот же индекс для источника и места назначения, поэтому массив назначения все еще начинается с initcio нулевых байтов, которые печатаются print_array и отображаются как пробелы в ваша система. Массив инициализируется всеми нулевыми битами как calloc().

Вот гораздо более простая версия:

#include <stdio.h> 

int main() {
    char p[1001];
    if (scanf("%1000s", p) == 1) {
        for (int i = 0; p[i] != '\0'; i++) {
            /* print the word starting at offset i */
            printf("%s\n", p + i);
        }
    }
    return 0;
}
0 голосов
/ 04 мая 2020

callo c () устанавливает память в ноль, поэтому вы печатаете нулевые символы в print_array (), когда это должны быть пробелы. Замените эти пустые символы пробелами там, и это решено, хотя я думаю, что есть более простой способ добиться того, что вы пытаетесь сделать.

Если вы не хотите, чтобы буквы были добавлены с пробелами, добавьте if (p[i] == '\0') continue; перед printf () вместо print_array ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...