数字字符串转化字母字符串

题目:现有一个数字字符串(全部由数字0--9组成),按照以下规则转化为由字母组成的字符串:

1---->a , 2----->b,3------>c, ... ... ,25---->y ,  26------>z 。如输入数字字符串“13201”,则输出的结果为:“acta”或"mta".设计一个程序,完成该转化功能,根据输入进来的数字字符串,输出其所有可能的字母字符串。(如不能转化,则输出“Can Not!”)

分析:根据转化规律,不难发现‘0’没有对应的字母,因此,‘0’必须依靠其前一位数字才能转化,而且,其前一位数字字符只能是‘1’和‘2’,不能为其他的数字字符。而‘1’可以与其后一位的任何数字字符组合并转化,但是,‘2’则只能与其后一位、范围在‘0’--’6‘的字符组合转化。需要注意的是,这些组合,不能导致其他后续‘0’(如果存在的话)的“孤立”(即不能借助1,2转化)。

#include <iostream>
using namespace std;

bool CanOrNot(char str[],int n)
{
	if(str==NULL||n<1||str[0]=='0')
		return false;
	for(int i=1;i<n;++i)
		{
			if(str[i]=='0')
				if(str[i-1]=='1'||str[i-1]=='2')
					NULL;
				else
					return false;
	}
	return true;
}

//函数处理后,str指向的字符串不含0(已被处理了)
void trasform(char str[],int n)
{
	if(false==CanOrNot(str,n))
	{
		cout<<"Can Not!"<<endl;
		return ;
	}

	char *str_2 = (char *)malloc(n);
	memset(str_2,0,n);
	
	str_2 = str;
	char *p = str,*q = str+1;

	//处理‘0’的问题,将0直接与前面的数字(1,2)替换成对应字母
	while(*p!='\0')
	{
		if(*q=='0')
		{
			if(*p=='1')//"10"
			   {
				   *str_2 = 'j';
				   ++str_2;
				   p = p + 2;
				   q = q + 2; 
			   }
			else //"20"
			{
				*str_2 = 't';
				 ++str_2;
				 p = p + 2;
				 q = q + 2;
			}
		}
		else//非0
		{
			*str_2 = *p;
			++str_2;
			++p;
			++q;
		}
	}
}

//实现转换的函数,时间关系,略,下次补上
void fun(char str[])
{
}

int _tmain(int argc, _TCHAR* argv[])
{
	char a[] = "1208514291302";//not
	char b[] = "1213105411214978";//yes
	
	trasform(b,strlen(a));
        fun(b);
        cin.get();
	return 0;
}
【未完,待续】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值