笔试面试1 用C实现C库函数itoa, atoi
要求用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的更多相关文章
- C语言提供了几个标准库函数 itoa() atoi()
C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...
- 找工作笔试面试那些事儿(8)---常问的CC++基础题
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...
- leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习
想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...
- C++常见笔试面试要点以及常见问题
1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...
- catalan数及笔试面试里那些相关的问题(转)
一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...
- php 笔试面试 总结
一次小小的笔试面试经历,虽然是一些简单的问题,但是自己在这儿总结一下,也查一些资料,得出一些较好的答案,也能帮助自己成长. 1.自己熟悉的http状态码及其意义 其实这个题答案随处可见.这儿也还是记录 ...
- 找工作笔试面试那些事儿(16)---linux相关知识点(1)
linux这部分的知识倒不是笔试面试必考的内容,不过现在很多公司开发环境都在linux系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...
- go golang 笔试题 面试题 笔试 面试
go golang 笔试题 面试题 笔试 面试 发现go的笔试题目和面试题目还都是比较少的,于是乎就打算最近总结一下.虽然都不难,但是如果没有准备猛地遇到了还是挺容易踩坑的. 就是几个简单的笔试题目, ...
- .net 笔试面试总结(1)
趁着在放假时候,给大家总结一点笔试面试上的东西,也刚好为年后跳槽做一点小积累. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补缺用的,真正 ...
随机推荐
- 在Foreda8上安装libaio-0.3.105-2.i386.rpm
libaio-0.3.105-2.i386.rpm是安装MySql必须的包,可以从这里下载:http://pan.baidu.com/share/link?shareid=2348086735& ...
- php之快速入门学习-2
创建(声明)PHP 变量 PHP 没有声明变量的命令. 变量在您第一次赋值给它的时候被创建: <?php $txt="Hello world!"; $x=5; $y=10.5 ...
- Camel之AsyncProcessor
Camel支持一种更复杂的异步的处理模型,异步处理器实现一个继承自Processor接口的AsyncProcessor接口,使用异步Processor的长处: a.异步Processor不会因等待堵塞 ...
- MySQL 设置慢查询为200ms
1:查看当前版本并设置long_query_time为0.2 mysql> select version(); +------------+ | version() | +----------- ...
- reset.css 和 flexible.js
重置css默认样式(淘宝): body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, f ...
- 用javascript的isNan()函数,可以判断是否为数字
var getstockid = $.trim($("#SearchString").val()); if (!isNaN(getstockid)) alert('是数字!'); ...
- Windows下安装Redmine 2.5.2不全然指南
我决定在项目中引入Redmine来管理开发任务和计划,至于Redmine的优点,请问度娘或者脑补一下. 互联网搜索到的.基本上都是旧版本号的. 1.2.1 的最多,我要新的啊,所以仅仅好自己来啦. 本 ...
- 自定义网站的icon和收藏夹图标
定制网站收藏夹图标的方法有两种: 第一种方法: 第一步,当然是准备一个能体现您的主页的风格和个性的图标.比较简便的办法除了下载,就是将您的网站的logo做成一个图标. 第二步,将这个图标文件命名为:f ...
- 生成CFree 5.0 注册码
C-Free 5.0真是一个很棒的编程软件,可今天用着用着却让我注册,下面的注册码分享给大家: 方法一.下载CFree 5.0之后,直接输入以下信息进行注册. 用户名:tianfang电子邮件:qua ...
- Linux磁盘分区及链接文件的特点
系统分区 传统的分区fdisk 最大支持2T的硬盘分区 对存储,多分区使用的parted 主分区:最多只能有4个 扩展分区 最多只能有1个 主分区加扩展分区最多有4个 不能写入数据,只能包含逻辑分区 ...