No.7 字符串处理函数和函数
字符串处理函数 1、strlen函数:计算目标字符串长度, 格式:strlen(字符指针指向区域) 注意:①不包含字符串结束符‘\0’ ②需要导入库<string> 2.拷贝函数:strcpy 参数: 目标字符串 源字符串 格式strcpy(目标字符串 ,源字符串 ); 注拷贝字符串时会将/0也拷贝 有限拷贝:strncpy 参数: 目标字符串 源字符串 字符长度 格式:strcpy(目标字符串 ,源字符串 ,长度); 成功:返回目标字符串的首地址 失败:NULL 注:有限拷贝不会将\0拷贝到目标字符串中 3、追加函数/有限追加函数 strcat/strncat: 格式:strcat(目标字符串 ,源字符串) // 将源字符串连接到目标字符串的尾部 格式:strncat(目标字符串 ,源字符串,长度n)//将源字符串前n个连接到目标字符串的尾部 注:①被追加的目标字符串 需要有足够空间 ②追加中 先去掉 目标字符串中的 \0 再进行追加将 源字符串中的\0也追加上 ③有限追加注意:有限追加也会将\0追加 4、比较函数/有限比较函数strcmp/strncmp 格式:strcmp(字符串 1,字符串 2)// 比较1与2 格式:strcmp(字符串 1,字符串 2,比较长度n) // 比较1与2前n个字符串 注: ①在不同操作系统中strcmp结果会不同 有的返回1 0 -1 还可能返回ASCII差值 ②字符串操作都是在\0结尾之前 5、字符串转化函数 sprintf / sscanf: 数据格式化后放入在字符串中 格式: sprintf(目标字符串 ,"参数",源字符串 )// 根据参数将源字符串来转换并格式化数据,然后将结果输出到指定的目标字符串中 scanf(目标字符串 ,"参数",&源字符串 ) //根据参数将源字符串来转换并格式化数据,然后将结果输入到指定的目标字符串中 注意:①sscanf与scanf一样需要在程序开始加入警告 ②成功时返回具体个数 失败 -1 6、在字符串中查找字符的位置 strchr函数: 格式: strchar(字符串,‘字符’) // 失败返回空的值(UNLL) 注意 :①找汉字时格式 “ 汉字 ”,是双引号非单引号 ② 字符使用单引号引起来 7、在字符串中查找另外字符串的位置 strstr函数: 格式 strstr(源字符串,“匹配字符串”) 注意: 匹配字符串使用双引号引起来 8、字符串分割 strtok函数 格式 strtok(目标字符串,“目标字符串中所包含的字符”) 注意:① 将切割点用\0表示,切完之后会破坏原先字符串样式 ②当连续出现多个分割字符时只替换第一个为\0 9、atoi 转整形 /atof转 双精度 /atol转long类型 : 格式: atoi(目标字符串) / atof(目标字符串) / atol(目标字符串) 注意:①跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符('\0')才结束转换 函数: 函数的创建与定义 1、案例冒泡排序--------将两个冒泡程序提取相同部分 1 数组 元素个素 2 循环条件 2、创建名 函数名 , 格式 函数名(参数列表) {函数体} 图片:函数封装模块 自定义格式: 返回值类型 函数名称(参数) {函数体 return返回值} 注意 ①数组作为函数参数,可以退化为函数名/可以退化为指针 ②在定义函数时指定的形参,可有可无,根据函数的需要来设计,如果没有形参,圆括号内容为空,或写一个void关键字 ③return后面的值也可以是一个表达式 程序执行流程: 1、函数调用时在未出现函数调用时,它们并不占内存中的存储单元 2、形参:函数的定义中的参数列表中的数据称为函数的形式参数 , 3、实参:实际参数 ; 4、实参会影响会形参的值 形参不会影响实参的值 4、理论机制:形参接收实参 在函数内部进行运算。 注意:实参会在函数执行完成在内存中会被释放掉 函数的声明和调用 1、声明: 声明函数的类型
声明的作用则是把函数的名字、函数类型以及形参的个数、类型和顺序(注意,不包括函数体)通知编译系统 2、定义:函数的定义就是对函数公功能的实现 3、调用 :执行函数 需要完成某项功能 注:①一个函数只能被定义一次,但可以声明多次 ②函数定义的位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。 4、函数的返回值
①如果函数返回的类型和return语句中表达式的值不一致,则以函数返回类型为准,即
函数返回类型决定返回值的类型
。对数值型数据,可以自动进行类型转换。 注意:如果函数返回的类型和return语句中表达式的值不一致,而它又无法自动进行类型转换,程序则会报错。 5、函数的参数列表
①在定义函数时指定的形参,必须是,类型+变量的形式 ②作用域不同和可以使用相同的变量名 6、return 和 exit(0)
在main函数中调用exit和return结果是一样的,但在子函数中调用return只是代表子函数终止了,在子函数中调用exit,那么程序终止 函数分类 系统 用户定义 作用:函数的使用可以省去重复代码的编写,降低代码重复率 函数名 见名知意 函数形参 不能给形参赋值 定义函数时 制定的形参 必须是
,类型+变量的形式 函数的实参与形参
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
- 形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。
- 实参出现在主调函数中,进入被调函数后,实参也不能使用。
- 实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。
- 在调用函数时,编译系统临时给形参分配存储单元。调用结束后,形参单元被释放。
- 实参单元与形参单元是不同的单元。调用结束后,形参单元被释放,函数调用结束返回主调函数后则不能再使用该形参变量。实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
#include <stdio.h> extern int add(int a,int b); extern int sub(int a,int b); extern int mux(int a,int b); extern int dive(int a,int b); int main() { int a,b,value; char name; scanf("%s%d%d",&name,&a,&b); switch(name) { case '+': value=add(a,b); printf("%d+%d=%d\n",a,b,value); break; case '-': value=sub(a,b); printf("%d-%d=%d\n",a,b,value); break; case '*': value=mux(a,b); printf("%d*%d=%d\n",a,b,value); break; case '/': value=dive(a,b); printf("%d/%d=%d\n",a,b,value); break; default: printf("出错,请重新输入!"); break; } return 0; } int add(int a,int b) { return a+b; } int sub(int a,int b) { return a-b; } int mux(int a,int b) { return a*b; } int dive(int a,int b) { if(!b) { printf("出错,分母不得为0!"); break; } return a/b; }
#include <stdio.h> #include <string.h> extern int my_strcmp(char s1[], char s2[]); int main() { //char s1,s2; int flag; char s1[],s2[]; char s1[] ="hello world"; char s2[]="hello abc"; flag=my_strcmp(s1, s2); if(flag == 0) { printf("%s等于%s\n", s1,s2); } else if(flag > 0) { printf("%s大于%s\n", s1, s2); } else { printf("%s小于%s\n", s1, s2); } return 0; } int my_strcmp(char s1[],char s2[]) { int i; i=strcmp(s1,s2); return i; }

更多精彩