博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Primer Plus 第11章 字符串和字符串函数 11.4 自定义字符串I/O函数
阅读量:6866 次
发布时间:2019-06-26

本文共 2174 字,大约阅读时间需要 7 分钟。

hot3.png

不一定要使用标准C库的函数进行输入和输出。如果不具备或者不喜欢它们,您可以自行定义,在getchar() putchar()的基础上建立自己的函数。

假定您希望有一个类似puts()但并不自动添加换行符的函数。程序清单11.10给出了一种方法。

程序清单11.10  put1.c程序

/*put1.c  不添加换行符打印一个字符串*/#include 
void put1(const char *string) /*不会改变这个字符串*/{ while(*string !='\0') putchar(*string++);}

char指针string最初指向被调参数的第一个元素。由于这个函数并不改变字符串,因此使用了const修饰符。这一元素的内容输出以后,指针递增并指向下一个元素。这个过程一直继续下去,直到指针指向一个包含空字符的元素。记住,++比*的优先级高,这意味着putchar(*string++)输出string指向的值,然后再增加string本身,而不是增加stirng指向的字符

可以把put1.c看作自定义字符串处理函数的范例。每个字符串都有一个空字符标志其结束,因此不必向函数传递字符串的大小。相反,函数依次处理每个字符直到遇到空字符。

用数组符号写这个函数会比较长:

int i = 0;while(string[i]!='\0')    putchar(string[i++]);

其中用到了一个作为索引的额外变量。

很多C程序员会在while循环中使用下面的判断条件:

while (*string)

当string指向空字符时,*string的值0,这将结束循环。上面的语句被广泛使用。

**说明  为什么程序清单11.10用const char *string而不用const char string[]作为形式参数?从技术上来说,二者等价,因此它们都有效。用方括号符号的一个用意 是提醒用户这个函数处理的是数组。但在使用字符串时,实际的参数可以是数组名、引起来的字符串,或被声明为char*类型的变量。使用const char *string可以提醒您实际的参数不一定是一个数组。

假定您希望有一个类似puts()的函数,并且这个函数还可以给出输出的字符个数。如程序清单11.11所示,添加这一功能很简单。

程序清单 11.11  put2.c程序

/*put2.c  打印一个字符串,并统计其中的字符个数*/#include 
int put2(const char *string) /*不会改变这个字符串*/{ int count=0; while(*sting) { putchar(*string++); count++; } putchar('\n'); return (count);}

下面的调用输出字符串pizza:

put2("pizza");

下面的调用还返回一个字符计数值,并把该值赋给num。在本例中这个值是5。

num=put2("pizza") ;

程序清单11.12 给出了一个使用put1()和put2()的驱动程序,其中还使用了嵌套的函数调用。

程序清单11.12  put_put.c 程序

/*put2.c  打印一个字符串,并统计其中的字符个数*/#include 
void put1(const char *string);int put2(const char *string); /*不会改变这个字符串*/int main(void){ put1("If I'd as much money"); put1(" as I could spend, \n"); printf("I count %d characters.\n", put2("I never would cry old chairs to mend. ")); return 0;}void put1(const char *string){ while(*string) putchar(*string++);}int put2(const char *string){ int count=0; while(*string) { putchar(*string++); count++; } putchar('\n'); return (count);}

我们使用printf()输出put2()的值。但是在计算put2()的过程中,计算机必须先执行这个函数,这样就输出了其中的字符串。

If I'd as much money as I could spend,I never would cry old chairs to mend.I count 38 characters.

 

转载于:https://my.oschina.net/idreamo/blog/735371

你可能感兴趣的文章
使用批处理实现mysql数据库备份与上传
查看>>
SpringMVC和Dubbo的整合
查看>>
1.15 克隆虚拟机
查看>>
python入门(三)-- 基本运算符
查看>>
Centos7设置网络
查看>>
Class com.googlecode.jsonplugin.JSONWriter ca...
查看>>
windows下react-native环境搭建
查看>>
高性能Server---Reactor模型
查看>>
nodejs安装jsdom模块出现MSB4025错误
查看>>
read-sequence的返回值
查看>>
线程同步的方法
查看>>
F7-Vue1.0与2.0不兼容列表
查看>>
TextView 添加Onclick 无效
查看>>
UML 类图
查看>>
win7 + vs2013 + zlib 编译
查看>>
ubuntu workerman kaer
查看>>
Android:四种启动模式分析
查看>>
css 兼容ie6,ie7,ff的fixed,元素上下端固定定位方法
查看>>
知道这20个正则表达式,能让你少写1,000行代码
查看>>
关于虚拟空间与物理空间思想的解析
查看>>