数字字符串解码为字母

题目:将一串数字字符串,解码为一串字母。比如1234,可以为abcd,也可以为lcd,awd,abcd。

思想:采用递归的方式,每两个为一组进行遍历,一组又可以拆分为两个待解字符或者结合为一个待解字符。

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
char letter[] = {'a', 'b', 'c', 'd', 'e', 'f', 
				'g', 'h', 'i', 'j', 'k', 'l', 'm',
				'n', 'o', 'p', 'q', 'r', 's', 't',
				'u', 'v', 'w', 'x', 'y', 'z'};
void print(char *decode, int size)
{
	int i = 0;
	for(i = 0; i < size; i++)
	{
		printf("%c", decode[i]);
	}
	printf("\n");
}
/*
 	code: 		待解码字符串
	decode:		已解码字符串
	len: 		code的长度
	code_cur: 	未解码字符串索引
	decode_cur:	已解码字符串索引
	size:decode:	已有字符的长度
 */
void decodeFun(char *code, char *decode, int len, int code_cur, 
				int decode_cur, int size)
{
	int i = 0;
	int number = 0, step = 0;
	if(code_cur == len)
	{
		print(decode, size);	
	}
	else
	{
		for(i = 0; i < 2; i++)
		{
			//每两个字符为一组,有两种组合方式:
			//1.两个为一个字符,2.一个为一个字符
			//所以循环两次
			if(i == 0)
			{
				if(len - code_cur > 1)  //如果剩余不够两个
				{
					number = (code[code_cur] - '0') * 10 + 
							code[code_cur + 1] - '0' - 1;
					step = 2;
				}
				else
				{
					continue;
				}
			}
			else
			{
				number = code[code_cur] - '0' - 1;
				step = 1;
			}
			if(number < 26)
			{
				decode[decode_cur] = letter[number];  				//获取解码字符
				decodeFun(code, decode, len, code_cur + step, 
							decode_cur + 1, size + 1); 			//进行下次递归
			}	
		}
	}
}


int main()
{
	int n = 0;
	scanf("%d", &n);
	char *code = (char *)malloc(n * sizeof(char));
	char *decode = (char *)malloc(n * sizeof(char));
	scanf("%s", code);
	decodeFun(code, decode, n, 0, 0, 0);
}

.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值