Где ошибка в моей C-программе, которая генерирует все возможные перестановки строки? - PullRequest
1 голос
/ 25 марта 2009

Я пытался написать программу на C, которая генерирует все возможные перестановки строки (например, 123 в коде ниже). Мне удалось, но он генерирует некоторые значения мусора после каждой возможной перестановки. Пожалуйста, помогите мне найти возможную причину. Это как-то связано с инициализацией? Код:

#include <stdio.h>
void permute(char number[],char out[],int level,int used[]);
int main()
{   
    char number[] = "123";
    char out[3] = "asd";    // Random initialization
    int used[] = {0,0,0};    // To check if number has been used in the string output
    permute(number,out,0,used);
}   
void permute (char number[],char out[],int level,int used[])
{
    if (level == 3)
    {
        printf("%s\n",out);
        return;
    }
    int i;
    for(i = 0; i < 3;i++ )
    {
            if( used[i] == 1) continue;
            out[level] = number[i];
            used[i] = 1;
            permute( number, out, level + 1,used );
            used[i] = 0;
    }       
}

Ответы [ 3 ]

2 голосов
/ 25 марта 2009

char out [3] = "asd"; // Случайная инициализация

Измените это на out [4], чтобы у вас было место для завершающего символа \ 0, и он должен работать так, как вы ожидаете.

2 голосов
/ 25 марта 2009

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

Один из вариантов - распечатать каждый символ отдельно:

if (level == 3)
{
    int p;
    for(p=0 ; p<3 ; p++) {
        printf("%c", out[p]);
    }
}
0 голосов
/ 25 марта 2009

Если вы считаете, что следует прекратить печатать содержимое out после первых трех символов, спросите себя, как он узнает об этом.

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