要求用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:coderguang@gmail.com

2014-10-31

于GDUT

笔试面试1 用C实现C库函数itoa, atoi的更多相关文章

  1. C语言提供了几个标准库函数 itoa() atoi()

    C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...

  2. 找工作笔试面试那些事儿(8)---常问的CC++基础题

    这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...

  3. leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习

    想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...

  4. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  5. catalan数及笔试面试里那些相关的问题(转)

    一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...

  6. php 笔试面试 总结

    一次小小的笔试面试经历,虽然是一些简单的问题,但是自己在这儿总结一下,也查一些资料,得出一些较好的答案,也能帮助自己成长. 1.自己熟悉的http状态码及其意义 其实这个题答案随处可见.这儿也还是记录 ...

  7. 找工作笔试面试那些事儿(16)---linux相关知识点(1)

    linux这部分的知识倒不是笔试面试必考的内容,不过现在很多公司开发环境都在linux系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...

  8. go golang 笔试题 面试题 笔试 面试

    go golang 笔试题 面试题 笔试 面试 发现go的笔试题目和面试题目还都是比较少的,于是乎就打算最近总结一下.虽然都不难,但是如果没有准备猛地遇到了还是挺容易踩坑的. 就是几个简单的笔试题目, ...

  9. .net 笔试面试总结(1)

    趁着在放假时候,给大家总结一点笔试面试上的东西,也刚好为年后跳槽做一点小积累. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补缺用的,真正 ...

随机推荐

  1. 《linux 内核全然剖析》 sys.c 代码分析

    sys.c 代码分析 setregid /* * This is done BSD-style, with no consideration of the saved gid, except * th ...

  2. (剑指Offer)面试题3:二维数组中的查找

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 鉴于数组的规律 ...

  3. Discuz常见小问题-修改了模块,如何重新移动原有模块的帖子

    如果还能找到这个帖子(比如用搜索关键字的方法,我们看到他现在已经在CodeSys控制器的目录下,可以点击那个CodeSys控制器的超链接看到里面所有帖子),打开这个帖子之后可以点击移动,然后选择新的目 ...

  4. Android中startService的使用及Service生命周期

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...

  5. Android提示版本更新的实现

    一.首先,参考了以下文章<Android自动检测版本及自动升级> http://www.linuxidc.com/Linux/2011-10/45718p2.htm: 步骤: .检测当前版 ...

  6. layer获取iframe内容

    var layer1 = function() { layer.open({ type: 2, title: '标题', maxmin: false, area: ['780px', '600px'] ...

  7. AS3的反编译

    一个as3写的swf反编译,修改类库: http://www.swfwire.com/ http://www.swfwire.com/decompiler 基于此类库的swf反编译工具(air) ht ...

  8. 【Linux】关于Linux的部分细节与配置文件

    文章对Linux的启动过程 进行了讲解,摘录一些要点,(摘自:https://www.ibm.com/developerworks/cn/linux/l-linuxboot/)如下: 当系统首次引导时 ...

  9. 关于ASP.NET MVC中Form Authentication与Windows Authentication的简单理解

    一般互联网应用,如人人网,微博,都是需要用户登录的,如果用户不登陆,就不能使用此网站.所以,这里都是用FormAuthentication,要求用户填写用户名与密码,然后登录成功后,FormAuthe ...

  10. hdu4490 Mad Veterinarian(bfs)

    Mad Veterinarian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...