C语言题目 - 利用函数和指针实现任意整数转换成字符串

题目

如题

思路

主要是两部分:分解整数(例如把1234分解为1、2、3和4 和 整型和字符之间的转换(2 转换为 ‘2’):

  • 分解整数:假设一个整数是 n ,那么分解这个整数的话就是循环求除以 10 的余数,直到商是 0 结束。
  • 字符转换见:字符和数字的转换

代码

#include

char * typeconverse(int n);//定义一个指针函数,功能是把传入的整数转换为字符串

int main()
{
	int a;//待转换的整数
	char * s;//接收函数返回值

	printf("请输入一个整数:\n");
	scanf("%d",&a);

	s = typeconverse(a);
	printf("原先的整数%d已转化为%s\n",a,s);

	return 0;
}

char * typeconverse(int n)
{
    char str[20];//存放数字分解转换后的一个个字符形成的一个字符串(倒序)
	char * p = str;
    int i=0,j=0;
	static char str1[20];//颠倒顺序后的数组,也是最终字符串
	char * q = str1;

	while ((n / 10) != 0)// 可以改为 while(n/10) 或者 while(n)
	{
		*(p+i) = '0' + n%10;//每个分解后的数字的ASCII码加上'0'的ASCII码就是数字相应字符的ASCII码,然后赋值给数组str的每个元素
		n /= 10;
		i++;
	}

	*(p+i) = '0' + n%10;
    
	*(p+i+1) = '\0';


	while (i >= 0)
	{
		*(q+j) = *(p+i);
		i--;
        j++;

	}//颠倒顺序后赋值给str1数组

	*(q+j) = '\0';

	return str1;
}

输出结果:

请输入一个整数:
135436
原先的整数135436已转化为135436

代码问题

思路差不多都正确,就是有些代码我复杂化了:

  • 如果定义了数组,还定义了下标 i ,那么其实不用指针来给数组赋值也可以,直接 数组名[i] 还简单,或者 *(数组名 + i)也行呀
  • while ( xx != 0) 以后都可以直接写为 while(xx) ,这个要成为习惯
  • while ( n /10 ) 和 while (n)其实判断出来结果一样而其中一个就要多除一个10,但是我的代码里加上除以 10 是多此一举,因为 n 已经在内部进行过除的操作并赋值了
  • 还有就是让一个数组的元素逆序输出还可以定义两个指针,一个在数组头,一个在数组尾,然后同时向中间走,一边走一边交换元素。这个方法本来很普遍,而且这是让数组从本质上改变,而不是再定义另一个数组去装,但是刚刚没想起来

改进的代码

#include 
 
char * itoa(char *p, int n);
 
int main(int argc, char *argv[])
{
        int n;
        char  s[50], * r;
 
        printf("input:");
        scanf("%d", &n);
 
        r = itoa(s, n);
 
        puts(r);
        puts(s);
 
        return 0;
}
 
char * itoa(char *p, int n)
{
        int r, i = 0, j;
        //static char p[50];
 
        while (n) {
                r = n % 10;
                n /= 10;
                p[i] = r + '0';
                i++;
        }
        p[i] = '\0';
 
        j = i-1;
        i = 0;
 
        while (i < j) {
                r = p[i];
                p[i] = p[j];
                p[j] = r;
                i++;
                j--;
        }//使用俩指针对着走并交换元素的方法时数组逆序
 
        return p;
}

你可能感兴趣的:(c语言,算法,开发语言)