文档章节

C Primer Plus 第11章 字符串和字符串函数 11.4 自定义字符串I/O函数

idreamo
 idreamo
发布于 2016/08/20 06:09
字数 989
阅读 39
收藏 0

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

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

程序清单11.10  put1.c程序

/*put1.c  不添加换行符打印一个字符串*/
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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.

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第11章 字符串和字符串函数 11.2 字符串输入

11.2.1 创建存储空间 要做的第一件事是建立一个空间以存放读入的字符串。 最简单的办法就是在声明中明确指出数组的大小: char name[81] ; 现在的name是一个已经分配81字节存储块的地址。另一...

idreamo
2016/08/19
23
0
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
52
0
C Primer Plus 第11章 字符串和字符串函数 11.5 字符串函数

C库提供了许多处理字符串的函数:ANSI C 用头文件string.h给出这些函数的原型。下面是一些最有用和最常用的函数:strlen() 、strcat()、strncat() 、strcmp() 、strncmp() 、strcpy()、 strn...

idreamo
2016/08/25
45
0
【书评:Oracle查询优化改写】第五至十三章

【书评:Oracle查询优化改写】第五至十三章 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩...

技术小胖子
2017/11/15
0
0
C Primer Plus 第11章 11.9 把字符串转换为数字

数字即能以字符串形式也能 以数字形式存储。以字符串形式存储数字就是存储数字字符。例如,数字213即能以数字'2'、‘1’、‘3’、‘0’的形式存储在一个字符串数组中。以数字形式存储213意味...

idreamo
2016/08/29
43
0

没有更多内容

加载失败,请刷新页面

加载更多

lopatkin俄大神Windows精简版系统 安装教程 简单版

1.制作U盘启动盘 或 安装pe到电脑 下载微pe工具箱.(为什么用这个呢,因为这个无毒,无广告,无后门.其它pe在安装完系统会安装一堆木马,垃圾软件,后门什么的) pe制作工具下载http://www.wepe.com...

xiaogg
17分钟前
3
0
【0917】Linux shell基础知识2

【0917】Linux shell基础知识2 8.7/8.8 shell变量 8.9 环境变量配置文件 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号 一、shell变量 1、使用...

飞翔的竹蜻蜓
19分钟前
3
0
管理角色认知-新晋管理常常犯的错

背景 管理是一门实践科学,从知道到做到,需要长时间的刻意练习,提前知道那些坑,可以提前规避。 坑1:被动执行 现象: 不主动找活干,等上级派活; 上级有了安排,指望上级替他决定实现方案...

春天spring
20分钟前
4
0
MongoDB4.0.2集群搭建

MongoDB4.0.2集群搭建 2019.02.01 01:02 619浏览 MongoDB4.0.2集群搭建 根据对象存储平台Django+MongoDB+Ceph的需求,现搭建部署一个十节点的MongoDB集群,主要以下关键点: 根据最新版本Mon...

linjin200
23分钟前
4
0
面试官问你B树和B+树,就把这篇文章丢给他

原文链接:面试官问你B树和B+树,就把这篇文章丢给他 1 B树 在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区...

欧阳思海
27分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部