首页 > 代码库 > c语言字符串处理
c语言字符串处理
三类函数 第一: 主函数 mian(){} 第二: 用户自定义函数 第三: c语言提供的库函数 scanf("%d;;;%d",&a,&b); //程序运行时,第一个参数输入后 必须连着敲三个分号 才能让第二个参数赋值 printf("%4d, %-6.2f", 5, 4.345);//默认4d代表右对齐 左边填写三空格, %-6.2f 左对齐 右边填写两个空格 |-- 整型 2147483648 |--浮点型 -- 单双精度 |--基本类型 |--字符型 | |--枚举类型 | | c数据类型 | |--数组类型 |--构造类型|--结构体类型 | |-共用体类型 | |--指针类型 | |--空类型 所有的数据,在处理时都需要先存放内存,所以不同的类型存储结构不一样单个字符 -由单引号括起来的一个字符; 占1个字节内存,存储内容为该字符的ascII码对应值 char a; a = getchar(); putchar(a);字符串 -由双引号括起来的字符序列; 在内存中从左到右依次存在连续空间,每个字符1个字节,每个值也是ascII码,注意默认尾部会加\0 char a[] = "i like C"; puts(a);//输出字符串后自动换行 char a[20]; gets(a); // 一次只能输入一个字符串到一个字符数组变量(包括空格和tab 直到回车结束) 字符串的处理时基于字符数组的..部会加\0例如://char c[9];//scanf("%s",c); //注意当格式符为%s时,scanf函数的地址列表是字符数组的名字;void main(){ char str1[9]; char str2[9]; char str3[9] = {"i like C"}; char str4[9] = "i like C"; char str5[] = "i like C"; int i; for (i=0; i<9; i++) { scanf("%c", &str1[i]); } str1[9] = ‘\0‘; scanf("%s",str2); printf("%s\n%s",str1,str2); //结果全部相同} 第一个:字符串长度 (strlen()函数)int strlen(字符数组名); ##返回不含\0的字符串长度第二个:字符串拷贝 (strcpy()函数)boole strcpy(字符数组名, "字符串"); ##返回true or false第三个:字符串拼接 strcat(str1,str2)函数 string strcat(字符数组名, "字符串2"); ##返回 参数1中 \0之前 拼接参数2 后的结果##strcat 注意点1、参数1(字符数组)不能是字符串常量,必须足够大,以便容纳字符串2的内容;2、连接前参数1(字符数组)的‘\0‘将被字符串2覆盖,连接后生成新的字符串最后多保留一个‘\0‘ 第四个:字符串比较 strcmp(‘字符串1‘, ‘字符串2‘)int strcmp(‘字符串1‘, ‘字符串2‘); ##返回 串1大于串2时为正 否则为负 或 零(相等)两个字符串从左到右比较ascii码值的大小直到遇到‘\0‘第五个: strlwr(字符串)函数string strlwr("字符串"); ##将字符串中所有大写字母转换为小写字母第六个: strupr(字符串)函数string strupr("字符串"); ##将字符串中所有小写字母转换为大写字母例:#include <stdio.h>#include <string.h>int strlens(char *str){ return strlen(str);}void string_copy(char string1[],char string2[]){ int i; for (i=0; string2[i]!=‘\0‘; i++) { string1[i] = string2[i]; } string1[i] = ‘\0‘;}void string_strcat(char *str1,char *str2){ printf("\n---%s---\n", strcat(str1,str2));}void main(){ char c[100]; char str[20] = "ni hao beijing"; int len; strcpy(c,"hello world"); string_strcat(str, c); len = strlens(str); printf("%s,\n--=%d,\n c=%s",str ,len, c);}二维字符串数组void strarr(){ char strone[2][10] = {{‘A‘,‘b‘,‘c‘},{‘V‘,‘i‘,‘p‘}}; char strtwo[2][10] = {{"Abc"},{"Vip"}}; char strthree[2][10] = {"Abc","Vip"}; printf("\n ---%s---\n",strthree[1]); //---Vip--- printf("\n ---%s---\n", strone[0]); //---Abc---}//连续输入三个学生名字 回车键分隔开; 然后输出void mian(){ char name[3][30]; int i; for (i = 0; i<3; i++){ gets(name[i]); } for (i=0; i<3; i++){ printf(name[i]); }} 自动变量 auto1、自动变量的存储空间为内存中的动态数据区,该区域中的数据随程序需要自动生成或释放(即程序执行到该作用域时分配内存,函数结束立即释放)2、函数或符合语句内定义的局部变量,只要不说明是static存储类型都为自动变量静态变量 static1、静态变量的存储空间为内存中的静态数据区, 该区域中的数据 在整个运行期内一直占用这些存储空间;直到程序结束被释放;2、所有的全局变量都是静态变量; 局部变量加上static 才为静态变量;3、static i = 5; 程序只会定义一次,如果第二次定义时程序发现内存已经存在i就不会执行这句话;寄存器变量 register 1、只有自动变量,或形式参数才可以是寄存器变量;全局变量和静态变量不可以;2、计算机中寄存器数目有限,不能使用太多;3、寄存器好处,如果 函数中有个寄存器变量,在调用函数时 会直接调用寄存器存放的变量值, 比取内存更快;函数结束释放寄存器变量;4、寄存器变量只限 int 、char和指针类型变量使用;如果寄存器满了,程序将会自动转换为自动变量;其他源程序文件公共使用某个变量需要 extern 声明例:extern int num;1、说明全局变量num在其他源程序文件中可以使用;2、如果源程序文件中全局变量仅限该文件使用,只要在该全局变量定义时的类型前加一个 static 3、static int m; 说明全局变量m只能在该文件内有效,其他文件不能引用;宏定义 (宏定义,文件包含,条件编译)1、不带参数的宏定义: #define 标识符 字符串; #define N 2 #define F N*2 //定义时可以利用已定义的 宏 作用:在编译预处理时,将源程序中所有标识符换成字符串;即源程序中所有N被换成2 2、带参数的宏定义 例如: #define L(r) 2*3.1415926*(r) //注意(r) 括号中r 如果是表达式 程序替换时不会对表达式处理, #define S(a,b,c) (a+b+c)/3 则表示源程序中如果使用了S(2,3,4) 即编译处理时被替换为 (2+3+4)/3 注意点: 带参数的宏在使用时很像函数 调用; 区别一,带参数的宏不涉及函数调用的流程控制转移,存储空间的分配,参数类型匹配,参数传递即返回值 区别二。函数在调用时在程序运行时执行,而宏替换时在编译预处理阶段执行;(宏的效率更高)3、文件包含时 如果 a.c 中包含了 b.c b.c中有包含了 d.c 那么 a.c中要先 包含d.c 在包含b.c
c语言字符串处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。