输入一个整数,将其转换为字符串输出
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
long2string(lNum/10,pszWord);
/*再将lNum的最后一位添加到字符串后*/
while(*pszWord) pszWord++;
*pszWord++='0'+lNum%10;
*pszWord='\0';/*不要忘记处理字符串结束符*/
}
while(lNum!=0)
{
chWord[i]='0'+lNum%10;/*转换为数字的ASCII码*/
i++;
lNum=lNum/10;
}
/*字符串最后一位加'\0'*/
chWord[i]='\0';
/*将字符串逆序*/
for(j=0;j<i/2;j++)
{
chTemp=chWord[j];
chWord[j]=chWord[i-1-j];
void long2string(long lNum,char *pszWord)
{
/*如果lNum等于0,不用继续递归*/
if(lNum==0)
{Biblioteka Baidu
/*字符数组的第一个单元是字符串结束符,后续的过程
要根据它添加整数的位*/
*pszWord='\0';
return;
}
/*先递归处理lNum前面的位*/
/*调用函数进行处理*/
long2string(lNum,chWord);
/*打印输出结果*/
printf("The outputed string=%s",chWord);
}
分析
运行结果为:
Please input a integer:
1972
The outputed string=1972
函数long2string也可以使用递归函数实现,下面是使用递归和指针的一个例子(main函数可以不做改动):
上述过程结束后,字符数组里存放了整数的每个位,但是不符合题目的要求,顺序正好相反。这可以用一个循环对数组进行转置:字符串第一个元素和最后一个元素对换;第二个元素和倒数第二个元素对换;……程序循环进行字符串长度/2次(如果字符串长度为奇数,中间元素正好不用处理)。
数据要求
问题中的常量:
无
问题的输入:
long lNum/*输入的long型数据*/
问题的输出:
char chWord[50]/*转换后的字符串*/
初始算法
1.初始化变量lNum;
2.调用函数得到字符串;
3.程序输出结果后退出。
算法细化
步骤2的细化
2.1 初始化临时变量
2.2lNum!=0时,循环执行得到各个位的数字
2.2.1转换数字ASCII码
2.2.2 i变量增1
2.2.3lNum=lNum/10,本步骤的目的有两个,一是结束循环,二是正确的得到数字
例9-15编写函数,输入一个整数,将其转换为字符串输出。例如,输入整数86556,输出字符串"86556"。
首先确定函数头,函数输入一个long型整数,输出一个char型字符数组,因此可以定为void long2string(long lNum,char chWord[])。注意这里的整数可能比较大,不要定为int型。
函数中,可以首先利用循环和%和/运算符,依次取得整数的每个位。思路如下:例如86556,我们可以将其对10取余,得到个位6;将86556除10余8655,继续对10取余,得到十位5;……以此类推,直到该数变为0为止。这样就可以将整数的每个位分离出来。
在上述的循环过程中,将分离出的数字依次保存到字符数组中。但是要注意,字符数组中保存的是字符,是数字的ASCII码,而不是数字本身的值。因为ASCII码表中阿拉伯数字的码值是连续的,因此一个常用的技巧是,字符0加数字值即为该数字的ASCII码值。
chWord[i-1-j]=chTemp;
}
}
main()
{
/* lNum是输入的整数,chWord是转换后的字符串*/
long lNum;
char chWord[50];
/*输入一个整数*/
printf("\nPlease input a integer:\n");
scanf("%ld",&lNum);
2.3 字符串最后加标志
2.4 循环进行数组的逆序
2.5 结束
流程图
图5-15程序执行流程图
程序代码如下:
#include“stdio.h”
void long2string(long lNum,char chWord[])
{
int i=0,j;
char chTemp;
/*依次取整数的末位,存入chWord*/
/*再将lNum的最后一位添加到字符串后*/
while(*pszWord) pszWord++;
*pszWord++='0'+lNum%10;
*pszWord='\0';/*不要忘记处理字符串结束符*/
}
while(lNum!=0)
{
chWord[i]='0'+lNum%10;/*转换为数字的ASCII码*/
i++;
lNum=lNum/10;
}
/*字符串最后一位加'\0'*/
chWord[i]='\0';
/*将字符串逆序*/
for(j=0;j<i/2;j++)
{
chTemp=chWord[j];
chWord[j]=chWord[i-1-j];
void long2string(long lNum,char *pszWord)
{
/*如果lNum等于0,不用继续递归*/
if(lNum==0)
{Biblioteka Baidu
/*字符数组的第一个单元是字符串结束符,后续的过程
要根据它添加整数的位*/
*pszWord='\0';
return;
}
/*先递归处理lNum前面的位*/
/*调用函数进行处理*/
long2string(lNum,chWord);
/*打印输出结果*/
printf("The outputed string=%s",chWord);
}
分析
运行结果为:
Please input a integer:
1972
The outputed string=1972
函数long2string也可以使用递归函数实现,下面是使用递归和指针的一个例子(main函数可以不做改动):
上述过程结束后,字符数组里存放了整数的每个位,但是不符合题目的要求,顺序正好相反。这可以用一个循环对数组进行转置:字符串第一个元素和最后一个元素对换;第二个元素和倒数第二个元素对换;……程序循环进行字符串长度/2次(如果字符串长度为奇数,中间元素正好不用处理)。
数据要求
问题中的常量:
无
问题的输入:
long lNum/*输入的long型数据*/
问题的输出:
char chWord[50]/*转换后的字符串*/
初始算法
1.初始化变量lNum;
2.调用函数得到字符串;
3.程序输出结果后退出。
算法细化
步骤2的细化
2.1 初始化临时变量
2.2lNum!=0时,循环执行得到各个位的数字
2.2.1转换数字ASCII码
2.2.2 i变量增1
2.2.3lNum=lNum/10,本步骤的目的有两个,一是结束循环,二是正确的得到数字
例9-15编写函数,输入一个整数,将其转换为字符串输出。例如,输入整数86556,输出字符串"86556"。
首先确定函数头,函数输入一个long型整数,输出一个char型字符数组,因此可以定为void long2string(long lNum,char chWord[])。注意这里的整数可能比较大,不要定为int型。
函数中,可以首先利用循环和%和/运算符,依次取得整数的每个位。思路如下:例如86556,我们可以将其对10取余,得到个位6;将86556除10余8655,继续对10取余,得到十位5;……以此类推,直到该数变为0为止。这样就可以将整数的每个位分离出来。
在上述的循环过程中,将分离出的数字依次保存到字符数组中。但是要注意,字符数组中保存的是字符,是数字的ASCII码,而不是数字本身的值。因为ASCII码表中阿拉伯数字的码值是连续的,因此一个常用的技巧是,字符0加数字值即为该数字的ASCII码值。
chWord[i-1-j]=chTemp;
}
}
main()
{
/* lNum是输入的整数,chWord是转换后的字符串*/
long lNum;
char chWord[50];
/*输入一个整数*/
printf("\nPlease input a integer:\n");
scanf("%ld",&lNum);
2.3 字符串最后加标志
2.4 循环进行数组的逆序
2.5 结束
流程图
图5-15程序执行流程图
程序代码如下:
#include“stdio.h”
void long2string(long lNum,char chWord[])
{
int i=0,j;
char chTemp;
/*依次取整数的末位,存入chWord*/