cvte2019校园招聘提前批嵌入式编程题2

2.要求实现下面函数,自行实现字符串转整数,给定一个字符串表示10进制(大小在int类型范围之内),转换为n进制整数(2<=N<=36),若果转换是被返回"Error".例如,“10” 2, “1010”
char * radixConvert(const char *num,const int n);

代码


/*
cvte2019校园招聘提前批,嵌入式编程题2
2.要求实现下面函数,自行实现字符串转整数,给定一个字符串表示10进制(大小在int类型范围之内),转换为n进制整数(2<=N<=36),若果转换是被返回"Error".
char * radixConvert(const char *num,const int n);
*/

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


char * radixConvert(const char *num, const int n)
{
	char *num_string;
	int   temp=0;
	
	static char   p[50] = {0};
	int   i = 0;
	int   result = 0;
	int   j = 1;
	int   k = 0;
	int  index = 0;
	num_string = (char *)malloc(sizeof(char)*(strlen(num)+1));

	if ((num == NULL) || (n<2 && n>26))
	{
		printf("num is null or n is out raange\n");

	}
	else
	{
		strcpy(num_string, num);
		temp = atoi(num_string);
		//printf("temp:%d       \n", temp);

		while (temp)
		{
			i = temp%n;
			result = result + i*j;
			j = j * 10;
			temp = temp / n;
			k++;
		}
		//printf("result:%d\n", result);
		free(num_string);

		//sprintf(*p, "%d", num); //将num转为字符串输入到 p 中
		sprintf(p, "%d", result); //将num转为字符串输入到 p 中
		//printf("p:%s\n", p);

	}
	
	return  p;
}

int  main(void)
{
	char *num = "11";
	const int   n = 2;
	char *result;
	result = (char *)malloc(sizeof(char)*32);

	result=radixConvert(num, n);
	if (result == NULL)
	{
		printf("转换失败\n");
	}
	else
	{
		printf("num:%s       result:%s\n", num, result);
		//free(result);
	}

	
	printf("helo....\n");
	system("pause");
	return 0;
}

运行结果


代码分析;

主要分为以下几步;

1.先把10进制的字符串转换为整数,调用c库函数,atoi

num=atoi(str).

2.把整数转换为n进制的数

3.使用sprintf函数,把整数转化为字符串输入到p中。

//sprintf(*p, "%d", num); //将num转为字符串输入到 p 中

猜你喜欢

转载自blog.csdn.net/yumengru/article/details/81144359
今日推荐