写函数,输入一个整数,将其转换为字符串输出。例如,输入整数86556,输出字符串"86556"。
首先确定函数头,函数输入一个long型整数,输出一个char型字符数组,因此可以定为
void long2string( long lNum, char chWord[] )
注意这里的整数可能比较大,不要定为int型。
函数中,可以首先利用循环和%和/运算符,依次取得整数的每个位。思路如下:例如86556,我们可以将其对10取余,得到个位6;将86556除10余8655,继续对10取余,得到十位5;… … 以此类推,直到该数变为0为止。这样就可以将整数的每个位分离出来。
在上述的循环过程中,将分离出的数字依次保存到字符数组中。但是要注意,字符数组中保存的是字符,是数字的ASCII码,而不是数字本身的值。因为ASCII码表中阿拉伯数字的码值是连续的,因此一个常用的技巧是,字符0加数字值即为该数字的ASCII码值。
上述过程结束后,字符数组里存放了整数的每个位,但是不符合题目的要求,顺序正好相反。
这可以用一个循环对数组进行转置:字符串第一个元素和最后一个元素对换;第二个元素和倒数第二个元素对换;… …程序循环进行 字符串长度/2 次(如果字符串长度为奇数,中间元素正好不用处理)。
void long2string(long lNum,char chWord[]) //
{
int i=0,j;
char chTemp;
while(lNum!=0) { /*依次取整数的末位,存入chWord */
chWord[i]='0'+lNum%10; /*转换为数字的ASCII码*/
i++;
lNum=lNum/10;
}
chWord[i]='\0'; /*字符串最后一位加'\0'*/
for(j=0;j<i/2;j++) /*将字符串转置*/
{
chTemp=chWord[j];
chWord[j]=chWord[i-1-j];
chWord[i-1-j]=chTemp;
}
}
int main()
字符串截取倒数第二个{
/* lNum是输入的整数,chWord是转换后的字符串*/
long lNum;
char chWord[50];
printf("\nPlease input a integer:\n"); /*输入一个整数*/
scanf("%ld",&lNum);
long2string(lNum,chWord);
printf("The outputed string=%s",chWord);
}
运行结果为:
Please input a integer:
1972
The outputed string=1972
函数long2string也可以使用递归函数实现,下面是使用递归和指针的一个例子(main函数可以不做改动):
void long2string( long lNum,char *pszWord )
{
if(lNum==0) /*如果lNum等于0,不用继续递归*/
{
*pszWord='\0'; /*字符数组的第一个单元是字符串结束符,后续的过程
要根据它添加整数的位,如果没这句,则程序运行时奔溃*/
return;
}
long2string(lNum/10,pszWord); /*先递归处理lNum前面的位*/
while(*pszWord) /*再将lNum的最后一位添加到字符串后*/
pszWord++;
*pszWord++ = '0'+lNum%10;
*pszWord='\0'; /*不要忘记处理字符串结束符*/
}
备注:如果没有*pszWord='\0'这句的话,在while判断那里,程序会不断循环,直到到一个字符’\0’为止,才结束while循环,不到则不停的死循环!!!这是非常危险的。故程序的最后一个*pszWord='\0'; /*不要忘记处理字符串结束符*/是起一样的作用的。
//以上递归版本,自己拿个数 [98] 进行模拟跑一遍,就知道程序的原理与正确性了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论