要求用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. Android混合开发,html5自己主动更新爬过的坑

    如今使用混合开发的公司越来越多,尽管出现了一些新技术,比方Facebook的react native.阿里的weex,但依旧阻挡不了一些公司採用h5的决心.当然,这也是从多方面考虑的选择. 在三年前就 ...

  2. HTTP.SYS 远程执行代码漏洞分析(MS15-034 )

    在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.Server软件. ...

  3. interllij13新建maven web工程

    1. 打开intellij,左边的可以别管它(历史) ②选择create new project(新建一个项目),选择Maven,并选择一个web模板,然后next. 3. 给自己的项目取名,grou ...

  4. 算法笔记_210:第六届蓝桥杯软件类决赛真题(Java语言C组)

    目录 1 机器人数目 2 生成回文数 3 空心菱形 4 奇怪的数列 5 密文搜索 6 居民集会 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 机器人数目 标题:机器人数目 少年宫新近邮购了小机器人 ...

  5. linux文件系统挂载

    接上一篇博客 创建好了文件系统的磁盘仍然是不能用的,必须挂载到某个目录下才能使用 [root@gechong mnt]# ll /dev/sdb* brw-rw----. root disk , 11 ...

  6. webservice系统学习笔记8-简单的权限校验

    服务端handler.java package com.ws01; import java.util.Set; import javax.xml.namespace.QName; import jav ...

  7. Javascript获取当月的天数

    var d = new Date(); var curMonthDays = new Date(d.getFullYear(), (d.getMonth() + 1), 0).getDate(); a ...

  8. HTTP 协议中的 Transfer-Encoding

    HTTP 协议中的 Transfer-Encoding 文章目录 Persistent Connection Content-Length Transfer-Encoding: chunked 本文作 ...

  9. 很幽默的讲解六种Socket IO模型

    很幽默的讲解六种Socket IO模型 本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教. 一:select模型二:WSAAsyncSelect ...

  10. C++编写简单的俄罗斯方块游戏

    代码地址如下:http://www.demodashi.com/demo/14593.html C++编写简单的俄罗斯方块游戏 使用C++编写一个简单的俄罗斯方块游戏. 1 环境要求 使用C++图形库 ...