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#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别

    1.int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型); 2.int.Parse(string sParameter)是个构造函数,参数类型只支持string类型; 3. ...

  2. iOS简易图片选择器 (图片可多选,仿微信)

    调用方法 NickyImagePickerViewController *pickerController = [[NickyImagePickerViewController alloc]init] ...

  3. SeasLog-An effective,fast,stable log extension for PHP

    github: https://github.com/Neeke/SeasLog @author Chitao.Gao [neeke@php.net] @交流群 312910117 简介 为什么使用S ...

  4. H5页面性能优化

    对于一个产品,性能在用户体验中是必不可缺的一环.性能优化是个长远的事情,联想到导航项目,列出以下性能优化的方案: 一. 基本的代码层面优化: 1:合理使用css 1)正确使用Display属性 Dis ...

  5. 如何获取网页上的LOGO

    一般公司网页上的图片都会禁止右键另存为,用截图工具接下来的图会带背景色,PS成背景透明有点费时间. 用Google Chrome 或Firefox 打开目标网页,右键点击审查元素,将鼠标放在图片上,一 ...

  6. [转]使用Gradle发布Android开源项目到JCenter

      转自:http://blog.csdn.net/maosidiaoxian/article/details/43148643 使用Gradle发布Android开源项目到JCenter 分类: G ...

  7. logstash使用操作部分

    1.logstash的概念及特点.概念:logstash是一个数据采集.加工处理以及传输(输出)的工具.特点: - 所有类型的数据集中处理 - 不同模式和格式数据的正常化 - 自定义日志格式的迅速扩展 ...

  8. KingBlog记录

    本片文章其他人可能看不懂,只是我做记录用,不要见怪 KingBlogCMS总结 开发工具: VS2012+SOLServer2008+IIS 开发语言: ASP.NET.Html.js.JQ 第三方: ...

  9. Mac OS的phpize空信息解决办法

    Mac下执行phpize 出现以下信息 grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/ ...

  10. Salesforce select字段的多少对性能影响巨大

    Salesforce select字段的多少对性能影响巨大,第1个是select 144个字段,第2个是select 5个字段, 性能相差了7倍 "select Id,IsDeleted,M ...