字符串数字从小到大输出

华为面试时,面试官出的一道题,将一个随机的整数转换成一个按各位上数值大小排序的整数,例如整数2541转换成1245,随机整数521368转换成123568,用C语言编程来实现,要求不能使用一步到位的库函数.

#include <stdio.h>
void func(char *str)
{
	if(NULL == str)
		return ;
	unsigned int s[10] = {0};
	const char *p = str;
	while('\0' != *p)
	{
		++ s[*p++ - '0'];
	}
	unsigned int i ,j, nCount = 0;
	for(i = 0; i < 10; ++ i)
	{
		for(j = 0; j < s[i]; ++ j)
		{
			str[ nCount++ ] = i + '0';
		}		
	}
	str[nCount] = '\0';	
}
void main()
{
	//无论多大的数据都当作字符串处理
	char str[] = "999888877773333111100001423412412341234123412412342";
	func(str);
	printf("%s\n",str);
}

有一段类似这样的字符串:"7C7C307C724C7C267C7C7C7C7C3A7C417C7C7" 其中每两位两位的代表一个字符,类似:“7C”对应“|”、“24”对应“$”、“41”对应“A”、“26”对应“&”等等。。。想用纯C写这样一个函数,

#include <stdio.h>
#include <string.h>
#include <math.h>

char FromStrToChar(char *str)
{
    if(NULL == str || strlen(str) != 2)
        return '\0';

    //对应十六进制数据
    int a[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    unsigned int i,sum = 0;

    for(i = 0; i < 2; ++ i)
    {
        if(str[i] >= '0' && str[i] <= '9')
        {
            sum += a[str[i] - '0'] * (16/pow(16,i));
        }
        else
        {
            sum += a[str[i] - 'A' + 10] * (16/pow(16,i));
        }
    }
        
    return (char)sum;

}

void StringConvert(char *str)
{
    unsigned int len = strlen(str);
    if(len & 1)
    {
        //字符串数目为奇数,编码有问题,自动清空
        //你可以根据自己情况处理
        *str = '\0';
        return ;
    }

    unsigned int i, nCount = 0;
    char a[3] = {0};

    for(i = 0; i < len / 2; ++ i)
    {        
        a[0] = str[i*2];//第一位
        a[1] = str[i*2 + 1];//第二位
        a[2] = '\0';

        str[nCount ++] = FromStrToChar(a);
    }
    str[nCount] = '\0';
}

void main()
{
    char str[] = "7C7C307C724C7C267C7C7C7C7C3A7C417C7C";

    StringConvert(str);

    printf("%s\n",str);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值