【C语言】带你快速入门并精通——字符串

在这里插入图片描述
欢迎来到我的博客!💃💃
🏡🏡推荐博客:August_._一起持续学习,不断总结,共同进步🎊🎊



字符类型

当今最常用的字符集是美国信息交换标准码( ASCII )字符集,它用7位代码表示128个字符。在 ASCII码中,数字0—9用0110000—0111001码来表示,大写字母 A — Z 用1000001—1011010码来表示。 ASCII码常被扩展用于表示256个字符,相应的字符集 Latin -1包含西欧语言和许多非洲语言中的字符。

char 类型的变量可以用任意单字符赋值:

 char ch ;
 ch = 'a';
 ch = 'A';
 ch = '0';
 ch = ' ';

注意,字符常量需要用单引号括起来,而不是双引号。

用 getchar 和 putchar 读/写字符

putchar 函数用于写单个字符

putchar ( ch );

getchar 函数会读入一个字符并将其返回。
为了保存这个字符,必须使用赋值操作将其存储到变量中:

 ch = getchar ();

事实上, getchar 函数返回的是一个 int 类型的值而不是 char 类型的值。
因此,如果一个变量用于存储 getchar 函数读取的字符,其类型设置为 int 而不是 char 也没啥好奇怪的。和 scanf 函数一样, getchar 函数也不会在读取时跳过空白字符

类型转换

表达式中的类型自动转换规则:
表达式中的类型自动转换规则
强制类型转换:(一元运算符

(类型名)表达式

sizeof运算符

sizeof 运算符允许程序获取存储指定类型的值所需要的内存空间。

表达式
sizeof (类型名)

代表存储属于类型名的值所需要的字节数,值是一个无符号整数

sizeof 作为一元运算符的优先级高于二元运算符,编译器会把表达式
sizeof i + j
解释为(sizeof i) + j ,
为了避免出现此类问题,在 sizeof 表达式中始终加上圆括号。

字符串

字符串的读和写

使用 printf 函数或 puts 函数来写字符串是很容易的。读字符串却有点麻烦,主要是因为输入的字符串可能比用来存储它的字符串变量长。为了一次性读入字符串,可以使用 scanf 函数,也可以每次读入一个字符。

1、用printf函数和puts函数写字符串

转换说明% s 允许 printf 函数写字符串。考虑下面的例子:

 char str[]=" Are we having fun yet ?";
 printf ("%s\n", str);
输出:
 Are we having fun yet ?

printf 函数会逐个写字符串中的字符,直到遇到空字符才停止。(如果空字符丢失, printf 函数会越过字符串的末尾继续写,直到最终在内存的某个地方找到空字符为止。)
如果只想显示字符串的一部分,可以使用转换说明%. ps ,这里 p 是要显示的字符数量。

语句
 printf ("%.6s\n ", str);
会显示
 Are we 

转换说明 %ms 会在大小为 m 的栏内显示字符串:

  1. 对于超过 m 个字符的字符串, printf 函数会显示出整个字符串,而不会截断。
  2. 如果字符串少于 m 个字符,则会在栏内右对齐输出。
  3. 如果要强制左对齐,可以在 m 前加一个减号。

m 值和p 值可以组合使用:
转换说明%m.ps 会使字符串的前 p 个字符在大小为 m 的栏内显示。

除此之外C 函数库还提供了 puts 函数:

puts (str);

puts 函数只有一个参数——需要显示的字符串。在写完字符串后, puts 函数总会添加一个额外的换行符,从而前进到下一个输出行的开始处。

2、用scanf函数读字符串

转换说明%s允许 scanf 函数把字符串读入字符数组:

scanf (“%s”, str);

在 scanf 函数调用中,不需要在 str 前添加运算符&,因为 str 是数组名,编译器在把它传递给函数时会把它当作指针来处理。
以%s格式输入字符串时,空格、回车键或Tab键是字符串输入结束的标志。

记住: 用 scanf 函数读入字符串永远不会包含空白字符。

为了一次读人一整行输入,我们使用gets 函数——把读入的字符放到数组中,然后存储一个空字符。
gets 函数不同于 scanf 函数之处:

  • gets 函数不会在开始读字符串之前跳过空白字符( scanf 函数会跳过)。
  • gets 函数会持续读入,以回车作为字符串输入结束的标志( scanf 函数会在任意空白字符处停止)。

此外, gets 函数会忽略换行符,不会把它存储到数组中,并用空字符代替换行符。

使用C语言的字符串库

C 语言的函数库为完成对字符串的操作提供了丰富的函数集。这些函数的原型驻留在<string.h>头中,所以需要字符串操作的程序应该包含下列内容:

#include <string.h>

<string.h>中有许多函数,这里将介绍几种最基本的。

1、strcpy 函数

strcpy (字符数组1, 字符串2)

例如:strcpy (str1,str2)
strcpy函数把str2中的字符复制到str1中,直到遇到str2中的第一个空字符为止(该空字符也要复制),strcpy函数返回str1。

注意:
strcpy (str1, str2)调用中,无法检查str2指向的字符串的大小是否适合str1指向的数组。如果 str2长度长于str1,那么结果就无法预料了。

拓展

strncpy (str1, str2, sizeof (str1));

第三个参数可以用于限制所复制的字符数。
strncpy 本身也不是没有风险。如果str2中存储的字符串的长度大于str1数组的长度, strncpy 会导致str1中的字符串没有终止的空字符。
下面是一种更安全的用法:

 strncpy ( strl, str2, sizeof (str1) -1);
 str1[ sizeof (str1)-1]='\0';

第二条语句确保str1总是以空字符结束,即使 strncpy 没能从str2中复制到空字符。
strncpy函数比 strcpy更安全,但是速度也慢一些。

2、strlen 函数

strlen (字符数组)

作用:
返回字符串的长度:第一个空字符之前的字符个数(不包括空字符)。

int len ;

len = strlen ("abc");     /* len is now 3*/
len = strlen ("");        /* len is now 0*/
strcpy (strl ,"abc"); 
len = strlen ( strl );    /* len is now 3*/

最后一个例子说明:当用数组作为实际参数时, strlen 不会测量数组本身的长度,而是返回存储在数组中的字符串的长度

3、strcat 函数

strcat (字符数组1,字符数组2)

注意

  1. 字符数组1的长度应足够大,以至于能存放下连接字符数组2中的所有字符。
  2. 做字符串连接strcat操作时,原字符串1后面的’\0’ 取消,在新字符串1的末尾增加一个 ‘\0’ 。

拓展

strncat (str1, str2, sizeof (str1) - strlen (str1) - 1);

该函数再遇到空字符时终止str1,第三个参数(待复制的字符数)没有考虑该空字符。
strncat函数比strcat更安全,但是速度也慢一些。

4、strcmp 函数

strcmp (字符串1,字符串2)

类似于字典中单词的编排方式,strcmp函数利用字典顺序进行字符串比较
当比较两个字符串中的字符时, strcmp 函数会查看字符对应的数值码。下面是 ASCII 字符集的一些重要性质。

  • A ~ Z 、 a ~ z 、0~9这几组字符的数值码是连续的。
  • 所有的大写字母都小于小写字母。(在 ASCII 码中,65—90的编码表示大写字母、97—122的编码表示小写字母。)
  • 数字小于字母。(48~57的编码表示数字。)
  • 空格符小于所有打印字符。( ASCII 码中空格符的值是32。)

strcmp函数比较字符串的大小,分以下3种情况:

  1. 字符串1>字符串2,函数返回值为正整数。
  2. 字符串1=字符串2,函数返回值等于0。
  3. 字符串1<字符串2,函数返回值为负整数。
  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值