镜缘浮影 小人本住在 苏州的城外 家里有屋又有田 生活乐无边

那些年我们一起忘掉的C (十).数值转字符串

2016-11-23
wilmosfang
c
原文地址 http://soft.dog/2016/11/23/c-basic-10/

前言

模块化是程序设计过程中很重要的思想,将复杂的计算过程外包给其它函数,可以简化代码结构

数字值与字符串的转化包含了最基本的转码思想


概要


数字转化为相应的字符串

写一个函数实现将任意一个正整数(long)转化为一个相应的字符串

如:将 123转化成 “123”。

void num2str(int num,char *str); main(){ ...; char str[20]={0}; r=num2str(1234,str); printf("%s\n",str); }

代码注解

#include <stdio.h>
#include <string.h>
#define LENGTH 20

char *num2str(long n, char *str) //定义一个数值转字符串的函数,接受一个长整型的数值和一个字符型指针,反馈一个字符型的指针
{
	int a,b,i,len; //定义四个整型变量,a用于存放临时数值,b用于存放个位数值,i进行循环控制,len用于存放长度
	char *p=str,tmpc; //定义一个字符型指针,和一个字符的临时存放处
	for(a=n;a > 0;a/=10,p++) //将数值n从个位开始逐个遍历,并且将指针逐个后移
	{
		b=a%10; //取出数值的个位数
		*p=b+'0'; //将个位数值转为字符值存到指针指示的位置
	}
	*p='\0'; //字符结尾加上'\0'作为字符串终结符
	p=str; //重置指针p到开头
	len=strlen(p); //获取字符串长度
	for (i=0;i<len/2;i++)
	{
		tmpc=p[i];
		p[i]=p[len-1-i];
		p[len-1-i]=tmpc; //翻转字符串,为什么要翻转,因为我们是逐个从低位向高位存储的,排在最前面的其实是个位,注意到没,这里p是一个指针但可以使用了[]来定位元素,其实在c语言里数组名是一个常量地址,指针是一个变量地址,[]是地址运算符,一次增加所属类型占用的字节数
	}
	return str;
}

main()
{	
	char str[LENGTH]; //定义一个字符数组来存放字符内容
	long num;	
	printf("please input a number (less then %d length):\n",LENGTH);
	scanf("%ld",&num); //将数值存到num中
	num2str(num,str);  //使用函数进行转换
	printf("the number string is %s\n",str); 
	return 0;
}

思路

将输入的数字进行保存,然后转化翻译为字符串,然后输出

数字字符串中的每一位字符由于代表不同的权重,应该放在正确的位置,在转化为字符串的过程中要将位置考虑在内

基础知识点

  • 指针的用法
  • 函数的定义
  • 指针作为函数参数
  • 函数的调用
原文地址 http://soft.dog/2016/11/23/c-basic-10/

评论