-1
#include<stdio.h>
#include<conio.h>
#include<string.h>
char *createP(int);
int main()
{
    int n,i;
    char str[100];
    printf("int n = ");
    scanf("%d",&n);
    printf("string str = ");
    scanf("%s",&str);
    if(n>40)
            return -1;
    for(i=0;i<strlen(str);i++)
        if(str[i]=='X' || str[i]=='Y' || str[i]=='Z')
            continue;
            else
             return -1;
    char *P;
    P=createP(n);
    printf("The generated string is = %s",P);
    return 0;
}
char *createP(int n)
{
    if(n==0)
            return "X";
    if(n==1)
        return "Y";
    if(n==2)
        return "Z";
    if(n>2)
        return strcat(createP(n-2),createP(n-3));
}

我正在尝试为以下问题创建一个字符串:

P(0) = 'X'

P(1) = 'Y'

P(2) = 'Z'

P(n) = P(n-2) + P(n-3), n>2 其中 + 表示字符串连接。我正在使用递归(看起来很明显)来解决这个问题。但是我的 .exe 不起作用。

4

3 回答 3

2

您错误地使用了 strcat 。

char * strcat ( char * 目标, const char * 源);

将源字符串的副本附加到目标字符串。终止空字符 >indestination 被 source 的第一个字符覆盖,并且空字符 >include 在由两个 indestination 连接形成的新字符串的末尾。

尝试使用类似的东西,

char *createP(int n)
{
    if(n==0)
            return "X";
    if(n==1)
            return "Y";
    if(n==2)
            return "Z";
    if(n>2)
    {   
    
            char *P = calloc (n, sizeof(char));
            strcat(P, createP(n-2));
            strcat(P, createP(n-3));
            return P;
    }   
}
于 2013-01-26T07:43:52.620 回答
0

您需要创建一个动态列表,仅char *P使用不让您将其用作字符串。

尝试声明char P[100],并在递归结束时放入\0char。

编辑:

类似的东西:

void createP(int n,int index)
{
    if(n==0)
            P[index] = "X";
            return ;

    if(n>2)
        return strcat(createP(n-2,index + 2),createP(n-3,index + 3));
}

而 P 是全局字符串,索引从 0 开始。

于 2013-01-26T07:25:13.157 回答
-1

内存分配不正确,我在声明时遇到了同样的问题

type array[20];

然后打电话array[20]=...;

解决方案是需要声明type array[21];

于 2016-11-02T00:37:08.983 回答