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》里贯穿全书的代码的更多相关文章

  1. 编程语言教程书该怎么写: 向K&R学习!

    原文地址:Lax Language TutorialsAndrew Binstock 每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁.从这些年的评审经验来看,这些语 ...

  2. K&R《C语言》书中的一个Bug

    最近在重温K&R的C语言圣经,第二章中的练习题2-2引起了我的注意. 原题是: Write a loop equivalent to the for loop above without us ...

  3. 主成分分析(PCA)及其在R里的实现

    主成分分析(principal component analysis,PCA)是一种降维技术,把多个变量化为能够反映原始变量大部分信息的少数几个主成分.设X有p个变量,为n*p阶矩阵,即n个样本的p维 ...

  4. K&R C风格函数

    前些天在看getopt源码, 一种前所未见的函数定义方法 int getopt(nargc, nargv, ostr) int nargc; char * const nargv[]; const c ...

  5. ANSI C 与 K&R C

    C语言由Dennis M.Ritchie在1973年设计和实现.从那以后使用者逐渐增加.到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的<TheC Pro ...

  6. VS里统计整个解决方案代码行数的方法

    VS里统计整个解决方案代码行数,在查找里输入正则表达式:b*[^:b#/]+.*$.如下图所示: 结果如下图所示:

  7. 学习K&R时初学者经常遇到的一个问题——EOF

    学习K&R时初学者经常遇到的一个问题——EOF

  8. php文本里 php和html代码谁先执行谁啊

    php文本里 php和html代码谁先执行谁啊 比如php里包含一个html文本,然后html代码里又包含了一个php文本,是按照谁先包含谁被服务器执行吗,即先执行php ,再执行里面的html,然后 ...

  9. 【收藏】轻松导出全民K歌里任何人录制的短视频(MV)、歌曲的方法

    有一次想把她在全民K歌里唱过的所有歌下载到电脑上,然后合成一个视频.但不知道怎么导出全民K歌里的歌曲,经过各种百度Google终于找到了一个用起来很简单的工具.不仅可以下载保存任何人录制的歌曲,还可以 ...

随机推荐

  1. C# 模拟鼠标移动与点击

    我们需要用到的mouse_event函数,位于user32.dll这个库文件里面,所以我们要先声明引用. [System.Runtime.InteropServices.DllImport(" ...

  2. 如何使用 vimdiff 来 git diff /svn diff

    #git 如何实现vimdiffgit config --global diff.tool vimdiff git config --global difftool.prompt false git ...

  3. 一步一步来做WebQQ机器人-(二)(第一次登陆)

    // 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...

  4. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  5. CPlus播放多媒体之播放声音

    1.头文件需要<mmsystem.h>,但是之前需要包含<windows.h> 2.预处理#pragma comment<lib,"winmm.h"& ...

  6. iOS-打开word、ppt、pdf、execl文档方式

    这里面包括下载和打开文档的操作:需要先导入<AFNetworking>的框架 第一步:创建一个显示文档的view:ReadViewController (1).h的代码如下: @inter ...

  7. android 绘图之Path与Paint详解

    /** * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分 ...

  8. -Xmx 和 –Xms 设置最大堆和最小堆

    C:\Java\jre1.6.0\bin\javaw.exe 按照上面所说的,最后参数在eclipse.ini中可以写成这个样子: -vmargs     -Xms128M     -Xmx512M ...

  9. iOS开发Hessian

    HessianKit使用参考资料比较少,通过摸索,把测试过程贴出来,代码很乱,未整理,先实现功能,再应用到项目中.供新手参考.如有问题,跟帖指正... HessianService与Java Serv ...

  10. Android MimeType的用法和几种类型

    关于MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII ...