在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
要求用C实现C库函数itoa或者是atoi.也就是字符串和数字的相互转换。 事实上这是一个很easy的问题。 可是有次笔试我没有理解好题意,也没有想到事实上这就是一个怎样将数字以字符串的方式存放。 这就是从来不刷笔试题面试题的后果啊。有时候都不知道题目到底是想考察什么东西! 说实话。C的一些特性我不是特别熟悉。不同于C++,C++的特性我能够说是很熟悉了,所以要用C来写对我来说也会多少有一点影响。 itoa 的实现
#include <stdio.h> #include <conio.h>//for getch() #include <memory.h>//for memset void itoa(long int value,char *string){//value为一个int值,string是用来存放转换后的字符串的 int pos=0;//存放string的下标 if(value==0) string[pos]='0'; else{ while(value>0){ int temp=value%10; string[pos++]=temp+'0';//以字符串的形式存放。将数字temp相应的字符存到string中 value=value/10; };//这时候,数字以逆序的方式放在了string中,需在逆序一次将顺序转回来 for(int i=0;i<pos-1-i;i++){ string[i]=string[i]^string[pos-1-i]; string[pos-1-i]=string[i]^string[pos-1-i]; string[i]=string[i]^string[pos-1-i]; } } } int main(){ long int num;//范围为 -2147438648~+2141438647.超过该范围会出错 int counts=0; char str[100]; while(counts++<100){ memset(str,'\0',strlen(str));//清空上次的结果,否则的话会影响下次结果,由于上次结果的字符串会余留在str里面 printf("please enter the value(int):"); scanf("%d",&num); itoa(num,str); printf(" the string is :(string):%s\n\n",str); } getch(); }执行截图: 能够看到,最后两个结果和和一開始的不一样,最后一个是由于范围溢出了。倒数第二个是由于多了一个0在開始的地方。而我的代码没有考虑这样的非法输入。 atoi的实现就更简单了
#include <stdio.h> #include <conio.h>//for getch() #include <memory.h>//for memset long int atoi(const char *string){ long int sum=0; int len=strlen(string); int i; long int multi=1; for(i=len-1;i>=0;i--){ sum=sum+(string[i]-'0')*multi; multi=multi*10; } return sum; } int main(){ long int num;//范围为 -2147438648~+2141438647.超过该范围会出错 int counts=0; char str[100]; while(counts++<100){ memset(str,'\0',strlen(str));//清空上次的结果。否则的话会影响下次结果,由于上次结果的字符串会余留在str里面 printf("please enter the string:"); scanf("%s",&str); num=atoi(str); printf(" the value is :(int): %d\n\n",num); } getch(); }
//写的错误或者不好的地方请多多指导。能够在以下留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我改动,更好的分享给大家,谢谢。 转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双 Email:[email protected]
2014-10-31 于GDUT |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论