возврат шаблона в строке - PullRequest
0 голосов
/ 19 апреля 2020

Я пишу программу с сайта codewars. Она должна возвращать шаблон ie.

1
22
333
4444
55555
666666
7777777
88888888
999999999
10101010101010101010

мой код ниже

char* pattern(const int n)
{
    char *result = (char*)malloc(sizeof(char)*n*n*n*n);
    char *temp = (char*)malloc(sizeof(char) * 6);
    memset(result, '\0', (n*n*n*n));
  memset(temp,'\0',6);
    if (n<1)
        return "";
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            sprintf(temp, "%d", i);
      strcat(result,temp);
      memset(temp,'\0',6);
        }
        strcat(result, "\n");
    }
    result[strlen(result) - 1] = '\0';
    return result;
}

Я сдаю все базовые c тесты, но случайные тесты я получил несколько ошибок Где я ошибся?

1 Ответ

0 голосов
/ 19 апреля 2020

Во-первых, никогда не разыгрывайте malloc, как в вашем коде. Одна из ошибок, которые я вижу в вашем коде:

char *result = (char*)malloc(sizeof(char)*n*n*n*n);

Если n большой, то размер result очень очень велик.

Вы можете использовать sprintf чтобы сначала преобразовать n в строку, затем вы можете вычислить длину результата, умножив n на длину строки n (+ 1 для нулевого символа):

    char str[20];
    sprintf(str, "%d", n);
    // allocate for result
    char * result = malloc(n*strlen(str) +1);

Завершить программа для теста:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * pattern(int n)
{
    char str[20];
    sprintf(str, "%d", n);

    char * result = malloc(n*strlen(str) +1);
    if (!result)
      return NULL;

    for(int i = 1; i <= n; i++) {
        strcat(result, str);
    }

    //printf("%s", result);

    return result;
}
void print_pattern(int n) {

    for (int i = 1; i <= n; ++i)
    {
        char * result = pattern(i);
        printf("%s\n", result);
        free(result);
    }
}

int main(int argc, char const *argv[])
{
    print_pattern(10);
    return 0;
}

Результат:

1
22
333
4444
55555
666666
7777777
88888888
999999999
10101010101010101010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...