我的C代码不知道错在哪里?气!!!都弄了好几天!!!
大概明白你的意思.其实就是输入一个字串,看用以上的推导方法能不能得到该目的串是不是!
不过你的程序好像有点复杂!顺便研究了一下...写了段代码不知道合不合你意!
只是针对该语法而已哦!
研究了一个小时,才50分....还不知道会不会给我.~也不知道值不值!
如下:测试结果附在后面
#include<stdio.h>
#include<conio.h>
#include<string.h>
char conver(char *buf);
char conver(char ch);
int sortA(char *buf, int nLen);
void main()
{
char buf[1024];
char ch;
while(1)
{
printf("pls input an buffer...\n");
gets(buf);
if(sortA(buf, strlen(buf)) == 0)
printf("Wrong\n");
else
{
printf("This OK!\n if you want continue press 'Y'\n");
ch = getch();
if(ch != 'Y' && ch != 'y')
break;
}
}
}
int sortA(char *buf, int nLen)
{
char temp[1024];
char ch;
for(int i=0; i<nLen; i++)
{
if((ch=conver(buf[i]))!= 0) //取一位
{
strcpy(temp, buf);
temp[i] = ch;
if(sortA(temp, nLen) == 1) //循环递归调用自己
{
printf("%s->%s\n", temp, buf);
return 1;
}
}
if(nLen == 3 && ((ch = conver(buf)) != 0)) //字符串==3位时获取结果
{
printf("%c->%s\n", ch, buf);
return 1;
}
if(i < nLen-2) //取三位
{
temp[3] = 0;
strncpy(temp, buf+i, 3);
if((ch=conver(temp)) != 0)
{
strncpy(temp, buf, i);
temp[i] = 0;
sprintf(temp, "%s%c%s\0", temp, ch, buf+i+3);
if(sortA(temp, nLen-2) == 1) //循环递归调用自己
{
printf("%s->%s\n", temp, buf);
return 1;
}
}
}
}
return 0;
}
char conver(char *buf) //转换,只有3位和1位2种情况
{
if(strcmp(buf, "aSe") == 0) //S-->aSe
return 'S';
if(strcmp(buf, "bBe") == 0) //B-->bBe
return 'B';
if(strcmp(buf, "cCc") == 0) //C-->cCc
return 'C';
return 0;
}
char conver(char ch)
{
if(ch == 'B') //S-->B
return 'S';
if(ch == 'C') //B-->C
return 'B';
if(ch == 'd') //C-->d
return 'C';
return 0;
}
测试信息:
pls input an buffer...
abccdee
Wrong
pls input an buffer...
abcdcee
S->aSe
aSe->aBe
aBe->abBee
abBee->abCee
abCee->abcCcee
abcCcee->abcdcee
This OK!
if you want continue press 'Y'