c语言字符串处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]); } } 自动变量 auto 1、自动变量的存储空间为内存中的动态数据区,该区域中的数据随程序需要自动生成或释放(即程序执行到该作用域时分配内存,函数结束立即释放) 2、函数或符合语句内定义的局部变量,只要不说明是static存储类型都为自动变量 静态变量 static 1、静态变量的存储空间为内存中的静态数据区, 该区域中的数据 在整个运行期内一直占用这些存储空间;直到程序结束被释放; 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语言字符串处理的主要内容,如果未能解决你的问题,请参考以下文章
译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段