《K&R》里贯穿全书的代码
1、getline(char s[], int lim)
调用结果:往参数数组中读入字符直到换行(即:读取一行)
返回值:参数数组所读入的字符串长度
在《c程序设计语言中》里使用频率特别高。
version 1:
int getline(char s[], int lim)
{
int c, i; for(i = ; i < lim - && (c = getchar()) != EOF && c != '\n'; ++ i)
s[i] = c;
if(c == '\n'){
s[i] = c;
++ i;
}
s[i] = '\0';
return i;
}
version 2:
int getline(char s[], int lim)
{
int c, i; i = ;
while(--lim > && (c=getchar()) != EOF && c != '\n')
s[i++] = c;
if(c == '\n') // 这里非常重要!
s[i++] = c;
s[i] = '\0';
return i;
}
2、atoi(char s[])
返回值:整型数
将字符串s转换为相应的整数类型
version 1:
int atoi(char s[])
{
int i, n; n = ;
for(i = ; s[i] >= '' && s[i] <= ''; ++ i)
n = * n + (s[i] - '');
return n;
}
version 2:
#include<ctype.h> int atoi(char s[])
{
int i, n, sign; for(i = ; isspace(s[i]); i ++)
;
sign = (s[i] == '-')? - : ;
if(s[i] == '+' || s[i] == '-')
i ++;
for(n = ; isdigit(s[i]); i ++)
n = * n + (s[i] - '');
return sign * n;
}
3、binsearch(int x, int v[], int n)
返回值:元素x在数组v[]中的下标(v[]数组内元素是升序的)
#include<stdio.h>
#define MAXLINE 7 int binsearch(int x, int v[], int n);
// unit test
main()
{
int a[MAXLINE] = {, , , , , , }; if(binsearch(, a, MAXLINE) == && binsearch(, a, MAXLINE) == )
printf("binsearch: pass\n");
else
printf("binsearch: error\n");
} int binsearch(int x, int v[], int n)
{
int low, high, mid; low = ;
high = n - ;
while(low <= high){
mid = (low + high) / ;
if(x < v[mid])
high = mid - ;
else if(x > v[mid])
low = mid + ;
else
return mid; // found match
}
return -; // no match
}
4、reverse(char s[])
倒置字符中s中各个字符的位置
#include<string.h> void reverse(char s[])
{
int c, i, j; for(i = , j = strlen(s)-; i < j; i++, j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
这段代码只是比较典型。
5、itoa(int n, char s[])
将数字n转换为字符串并保存到s中
void itoa(int n, char s[])
{
int i, sign; if((sign = n) < )
n = -n;
i = ;
do{
s[i++] = n % + '';
}while((n /= ) > );
if(sign < )
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
代码简洁,逻辑清晰。
6、atof(char s[])
把字符串s转换为相对应的双精度浮点数
#include<ctype.h> double atof(char s[])
{
double val, power;
int i, sign; for(i = ; isspace(s[i]); i++)
;
sign = (s[i] == '-')? - : ;
if(s[i] == '+' || s[i] == '-')
i++;
for(val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '');
if(s[i] == '.')
i++;
for(power = 1.0; isdigit(s[i]); i++){
val = 10.0 * val + (s[i] - '');
power *= 10.0;
}
return sign * val / power;
}
和atoi不同的是小数部分的处理
《K&R》里贯穿全书的代码的更多相关文章
- 编程语言教程书该怎么写: 向K&R学习!
原文地址:Lax Language TutorialsAndrew Binstock 每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁.从这些年的评审经验来看,这些语 ...
- K&R《C语言》书中的一个Bug
最近在重温K&R的C语言圣经,第二章中的练习题2-2引起了我的注意. 原题是: Write a loop equivalent to the for loop above without us ...
- 主成分分析(PCA)及其在R里的实现
主成分分析(principal component analysis,PCA)是一种降维技术,把多个变量化为能够反映原始变量大部分信息的少数几个主成分.设X有p个变量,为n*p阶矩阵,即n个样本的p维 ...
- K&R C风格函数
前些天在看getopt源码, 一种前所未见的函数定义方法 int getopt(nargc, nargv, ostr) int nargc; char * const nargv[]; const c ...
- ANSI C 与 K&R C
C语言由Dennis M.Ritchie在1973年设计和实现.从那以后使用者逐渐增加.到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的<TheC Pro ...
- VS里统计整个解决方案代码行数的方法
VS里统计整个解决方案代码行数,在查找里输入正则表达式:b*[^:b#/]+.*$.如下图所示: 结果如下图所示:
- 学习K&R时初学者经常遇到的一个问题——EOF
学习K&R时初学者经常遇到的一个问题——EOF
- php文本里 php和html代码谁先执行谁啊
php文本里 php和html代码谁先执行谁啊 比如php里包含一个html文本,然后html代码里又包含了一个php文本,是按照谁先包含谁被服务器执行吗,即先执行php ,再执行里面的html,然后 ...
- 【收藏】轻松导出全民K歌里任何人录制的短视频(MV)、歌曲的方法
有一次想把她在全民K歌里唱过的所有歌下载到电脑上,然后合成一个视频.但不知道怎么导出全民K歌里的歌曲,经过各种百度Google终于找到了一个用起来很简单的工具.不仅可以下载保存任何人录制的歌曲,还可以 ...
随机推荐
- 《UML大战需求分析》阅读笔记01
在刚学习软件开发的课程时,首先学习了UML设计,但只是学习了基本的语法,虽然在学期通过课堂练习进行了实践,但并没有真正理解其中作用.为了进一步的理解UML的用法,我阅读了<UML大战需求分析&g ...
- Jquery EasyUI使用总结(一)
1,弹出Iframe,新窗口 //打开编辑页面要加载的数据 function ShowDialog(id, url, width, height, onLoadFunc) { $("#&qu ...
- Oracle 10g ORA-01034: ORACLE not available 错误
今天在开发系统的时候,刚开始还好好的,突然就遇到了一个错误 ORA-01034: ORACLE not available 感到莫名其妙.然后排查问题 监听器ok,各项服务ok. 最后解决办法如下: ...
- 【五子棋AI循序渐进】——开局库
首先,对前面几篇当中未修复的BUG致歉,在使用代码时请万分小心…………尤其是前面关于VCF\VCT的一些代码和思考,有一些错误.虽然现在基本都修正了,但是我的程序还没有经过非常大量的对局,在这之前,不 ...
- C/C++面试
1. RTTL 运行时类别识别,在只有一个指向基类的指针或引用时确定一个对象的准确类型. 2.什么是拷贝构造函数 是单个形参的构造函数,实参是与该类同属一类的对象:在类定义中,如果未提供自己的拷贝构造 ...
- JavaScript特效(调试笔记)
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
- 《android 导入第三方源码jar包遇到的坑》
最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...
- PL/SQL不支持64位Oracle Client 解决办法
解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed 说明PLSQL Developer并不支持Or ...
- HTML 中按钮作为form表单元素提交特性两则 --- 参HTML考标准分析
相同name的submit 类型的input提交行为 描述 这种情况, <input type="submit" name="ACTION" value= ...
- RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)
1.框架的部署安装,服务器端和客户端 答:开发版以上版本支持SOA模式,也即真正的面向服务端的模式,在实际使用过程中,可根据项目的实际需要,来选择性的进行部署(直连模式或SOA模式),如需要分布式应用 ...