《c primer plus》c语言学习笔记整理(十一)-字符串与字符串函数

第十一章 字符串与字符串函数
1.表示字符串与字符串I/O
(1)在程序中定义字符串
1)puts函数只显示字符串,而且自动在显示的字符串末尾加上换行符;
2)字符串字面量:用双引号括起来的内容,
3)
2.字符串输入
3.字符串输出
(1)puts()函数
1)puts函数只显示字符串,而且自动在显示的字符串末尾加上换行符,将字符串的地址作为参数传递给它就可以。
2)puts()如何在遇到空字符时就停止输出,所以要确保有空字符。
(2)fputs()函数
1)puts()针对文件定制的版本
2)函数的第二个参数指明要写入数据的文件(可以用定义在stdio.h中的stdout作为该参数)
3)该函数不会在末尾加上换行符。
4)puts应与gets()配对使用
5)fputs()应该与fgets()配对使用;
(3)printf()函数
1)也把字符串地址作为参数
2)计算机执行时间更长,但是打印多个字符串却更简单。ptintf(“well, %s,%s\n”,name, MSG);
3)
4.字符串函数
(1)strlen()函数:统计字符串的长度;
(2)strcat()函数:用于拼接字符串
1)用法:接收两个字符串作为参数,把第二个字符串的备份附加在第1个字符串的末尾,并把拼接后形成的新字符串作为第一个字符串,第二个字符串不变,该函数的类型是char *(也就是指向char的指针)。strcat()函数返回第一个参数,即拼接第二个字符串后的第一个字符串的地址。
2)函数类型:char *(指向char的指针)
(3)strncat()函数:同(2),该函数的第三个参数指定了最大添加字符数,可以检查第一个数组是否能容纳第二个字符串
(4)strcmp()函数:用于字符串比较,通过比较运算符来比较字符串,就像比较数字一样,如果两个字符串参数相同,该函数就返回0,否则返回非零值。(直到发现不同的字符为止)
1)只会比较第一个空字符前面的部分,比较的是字符串,不是整个数组
2)ASCII标准规定:在字母表中,如果第一个字符串在第二个字符串前面,strcmp()返回一个负数;如果两个字符串相同,strcmp()返回0;如果第一个字符串在第二个字符串后面,strcmp()返回正数,然后返回的具体值取决于实现。
3)该函数返回的具体值并不重要,我们只在意该值是0还是非0(即比较的两个字符串是否相等。)
4)该函数比较的是字符串,不是字符,参数应该为字符串。
3)strncmp()函数:可以比较到字符不同的地方,也可以只比较第三个参数指定的字符数。
(5)strcpy()函数与strncpy()函数:拷贝字符串
1)对于strcpy()参数的顺序,第一个是目标字符串, 第二个是源字符串。
2)指向源字符串副本的第1个指针应指向一个数据对象(比如,数组),且该对象有足够的空间存储源字符串的副本。
3)可以把源字符串的第二个指针声明为指针、数组名或字符串常量
4)声明数组将分配存储数据的空间,但是声明指针只分配存储一个地址的空间;
5)strcpy()的返回类型是char *,该函数返回的是第一个参数的值,也就是第一个字符的地址,其次,第一个参数不必指向数组的开始,这个属性可以用于拷贝数组的一部分
6)strcpy()将源字符串的空字符也拷贝在内;
7)拷贝字符串用strncp()更安全,该函数第三个参数指明可拷贝的最大字符数。
8)strncpy()函数在使用的时候应该注意把程序设置为比目标数组大小少1;
(6)sprintf()函数:声明在stdio.h中,
1)作用:与printf()函数类型,但是它是把数据写入字符串,而不是打印在显示器上,
2)该函数可以把多个元素组合成一个字符串,
3)用法:第一个参数为目标字符串的地址, 其余参数和printf()相同,即格式字符串和待写入项的列表。
5.自定义I/O函数
(1)在getchar()和putchar()的基础上自定义所需的函数
(2)用数组表示法创建此类函数会更加复杂一点,往往还要为数组索引创建一个额外的变量。
(3)当string指向字符时,*string的值是0;
(4)处理字符串,实际参数可以是数组名、用双引号括起来的字符串、 或者声明为char *类型的变量。用const char *string可以提示用户:实际参数不一定是数组
6.字符串排序
(1)排序是指向字符串的指针,而不是字符串本身
(2)c库中有一个更高级的排序函数,qsort(),该函数使用一个指向函数的指针进行排序比较。
(3)ctype.h中的函数通常作为宏(macro)来实现
7.命令行参数
(1)c编译器允许main()没有参数或者有两个参数(一些实现允许main()有更多参数,属于对标准的扩展)
(2)main()有两个参数时,第一个参数是命令行中字符串数量,这个int类型的参数被称为argc(表示参数计数)。系统用空格表示一个字符串的结束和下一个字符串的开始。
(3)命令行字符串被储存在内存中,并把每个字符串的地址储存在指针数组中,而且该数组的地址被储存在main()的第二个参数中。按照惯例,这个指向指针的指针被称为argv(表示参数值
(4)char **argv与char *argv[ ]等价,argv是一个指向指针的指针,它所指向的指针指向char
(5)许多环境中都允许用双引号把多个单词括起来形成一个参数
8.把字符串转化为数字
(1)数值计算用的是数值形式,但是在屏幕上显示数字则要求字符串形式,因为屏幕显示的是字符串
(2)假设你编写的程序需要使用数值命令形参,但是命令形参数被读取为字符串,因此要使用数值,必须先把字符串转化为数字。
(3)如果需要整数,可以使用atoi()函数(用于把字母数字转化为整数),该函数接受一个字符串作为参数,返回相应的整数值。
(4)该函数头文件为stdlib.h
(5)ANSIC还提供一些更智能的函数:strtol()把字符串转换为long类型的值,strtoul()将字符串转换成为unsigned long类型的值,strtod()把字符串转化成double类型的值。这些函数不仅可以识别和报告字符串中首字符是否为数字,而且,strtol()和strtoul()还可以指定数字的进制。
(6)strtol()函数原型:
long strtol(const char *restrict nptr,char **restrict endptr, int base),nptr为指向待转换字符串的指针,endptr是一个指针的地址, 被设置为标识输入数字结束字符的地址,base表示以什么进制写入数字。

猜你喜欢

转载自blog.csdn.net/weixin_45096408/article/details/104758649