标题:c语言字符串知识简单整理(已更新)
只看楼主
captain2050
Rank: 2
等 级:论坛游民
帖 子:57
专家分:43
注 册:2016-7-15
结帖率:92.86%
已结贴  问题点数:20 回复次数:1 
c语言字符串知识简单整理(已更新)
(应版主建议,简单加上了ctype.h头文件的内容)(《c专家编程》https://down.bccn.net/7628.html
本人总结了c语言字符串的相关内容,肯定没有涵盖所有字符串的知识点,只是把我知道的写了出来,欢迎的大家挑错,补充。
这里本人先提出一个问题:怎么让linux环境中的gcc编译含有C11中可选函数(如strcat_s())的源代码文件?
   1.概述
c语言有整型常量,浮点型常量...当然也有字符串常量(但没有字符串类型,要用字符数组存储字符串),就是在一对双引号时之间的一串字符或符号。比如说"hello"  "nice to meet you"  "....!!!lll000__==" 这些都是字符串,字符串与字符的区别是:字符是单个的,比如'a' 而字符串是一大堆字符连在一起,用双引号括起来。在双引号之间的任何内容都会被编译器看作字符串。当你声明定义了一个字符数组并存储了字符串,如char a[100]="this is a sting";编译器会自动在字符串最后加上'\0' 这个叫空字符,它的ASCII码值是0,编译器就是根据这个东西来判断一个字符串的结束位置。
   2.存储字符串的变量
其实C语言压根就没有字符串“变量”,要是想存储字符串“常量”就要用字符数组,就是char型的数组。举个例子
char a[10] = "abcdefghi";
这里char说明了数组a是字符型的,可以存储字符串。a是字符数组的数组名。[]中的数指定数组的维,就是这个数组能存储多少个字符。要注意我定义的维数是10,但实际a到i一共有9个字母,这样这个字符数组的最后一个元素就可以存储空字符'\0'应为必须要有它来标志此字符数组到此为止,当然也可以用a[10]这个数组存储十个字符,但并不建议这么做。
上面那条语句也可以写成 char a[]= "abcdefghi";这样不规定数组的维也是可以的,编译器会自动判断所需的数组长度。
   3.输入输出字符串
大家都应该知道%d是整型十进制,%f代表浮点型,字符串就要用%s
比如printf("%s",a);       scanf("%s",a);
这里scanf中的a前面不需要加取址& 因为数组名就代表数组地址。
   4.多维字符数组
多维数组可以这样定义
char a [3][40]={"diyiwei","dierwei","disanwei"};
它是个二维数组,这里逗号用来分割第一维,也就是说"diyiwei"属于a[0] ,"dierwei"属于a[1],"disanwei"属于a[2]
也可以写成char a[][40]={"diyiwei","dierwei","disanwei"};这样省略第一维大小,但必须有第二维大小。
也可以写成
char a[3][40]={
                "diyiwei",
                "dierwei",
                "disanwei"
              };
   5.字符串操作
以下处理字符串的函数在string.h中,所以要在代码开头加上#include<string.h>
基本每个库函数都有一个对应的C11规定的可选函数,这些可选函数比他们对应的原先的库函数更安全,但要先让编译器支持C11中的可选函数(这也是让本人困惑的地方,因为书中提到的方法在本人的linux上面并不适用)
1.确定字符串长度:strlen(数组名) 他会返回一个整数,整数值的大小是字符串的长度
  对应C11中的可选函数为strnlen_s(数组名,数组大小)
2.复制字符串:strcpy(数组名1,数组名2) 这个函数可以将第二个数组复制到第一个数组中。
  对应C11中的可选函数为strcpy_s(数组名1,数组1的大小,数组名2)
3.连接字符串:strcat(数组1,数组2)连接两个数组
  对应strcat_s(数组1,数组1的最大长度,数组2)
4.比较字符串
   strcmp(数组1,数组2)   他会将两个数组从第一个开始逐个比较,就是比较第一个不同的字符的ASCII码
    如果  数组1 > 2  返回 -1
             1 = 2  返回 0
             1 < 2  返回 1
   6. ctype.h
(以下括号里都是char型变量,我就不重复写了)
islower()判断是否为小写字母
isupper()........大写字母   
isalnum()        字母,十进制数字
iscntrl()        控制字符
isprint()        可打印字符,包括空格
isgraph()        可打印字符,不包括空格
isdigit()        十进制数字
isxdigit()        十六进制数字
isblank()        空格或\t
isspace()        空位字符
isalpha()        字母
tolower()        转换为小写
toupper()        转换为大写


[此贴子已经被作者于2016-7-16 15:26编辑过]

搜索更多相关主题的帖子: 源代码 字符串 linux 双引号 知识点 
2016-07-15 09:06
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:20 
既然整理了string.h里的函数,那就再整理一下关于ctype.h里的函数。
对于字符串,这两个头文件里的函数都很有用。
2016-07-16 07:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-466943-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.350296 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved