黑马程序员技术交流社区
标题:
字符串处理函数总结
[打印本页]
作者:
枫叶路过123
时间:
2014-11-3 19:02
标题:
字符串处理函数总结
今天开始是复习之前学过的内容,写程序的时候,要尽可能的优化代码,尤其是循环语句,字符串就是字符数组,C语言没有单独处理字符串的功能。
字符串的处理函数:
strlen(str)返回字符串的有效长度,遇到’\0’结束;
strcat(str1,str2)字符串追加,会越界strncat(str1,str2,n)有效追加
strcmp(str1,str2)字符串比较,=返回0,>返回1,<返回-1;strncmp()
strcpy(str1,str2)字符串拷贝
sprintf(str,“”,a)格式化字符串str,结果输出到str
sscanf()格式化输入
strchr(str,‘’)查找指定字符的位置,作为首地址,返回一个数组,
strstr(str,str1)查找子串
strtok(str,str1)以str1分割字符串str,只取第一个str1之前的,往后调用需要使用null才可以依次显示出来,协议的解析时候有用。使用<tag>的时候
如果第一个是a输不出来。不适合使用<>。
atoi(str)返回一个int类型。atof()atol(),没有itoa(),使用sprintf()。
函数:C语言就是无数个函数构成的。
str1和str2的合并:第一步求得str1的长度,使用一个while循环,当遇到’\0’的时候就结束,包含一个计数器;第二步,再使用一个while循环,只要str2不是’\0’就继续,也包含一个计数器,同时第一个计算器也同时运算。
str1和str2的拷贝:只要str2的最后一个不是’\0’就给str1赋值。
函数的声明时候,需要在后面加一个分号。形参不可以给实参传递数据。多个源代码的编译,gcc-o a.c b.c多个.c档一起编译,在主函数使用其他.c档函数的时候,在前面声明一下,避免麻烦,将声明放到.h档中。预编译的时候要使用条件编译,这样会防止代码冗余,有时候出现重复定义的错误。而且也可以在中间加else。经常用在头档中。
使用宏定义可以讲代码改变成鬼都不认识的。Main()函数和exit()函数,return只是某个函数结束,程序并不结束,exit()函数无论在何处都会直接退出程序。
函数的递归:函数自己调用自己。原则:一定要有终止条件,否则是无限递归,会耗尽存储器。递归都可以用循环来实现。
递归求字符串的长度:由于字符串当作参数的时候,会丢失维度,这个我们需要一个变量来查看当前的下标。在每次调用的时候就给加1.
注:递归和循环最主要的区别是,循环需要一个量,递归的时候需要一个参数来替代,在函数里面的量是没有用的,因为每次调用的时候都会用到,每次初始化时候就会有恢复。
十进制转换为二进制:奇数的二进制最后一位一定是1,偶数的最后一位一定是0。1.用n对2取余;2.如果n>=2,递归,参数对2整除;3输出结果。如果输出放在步奏2前面,就是先序递归,否则,后序递归。
递归求和:终止条件就是当n==1的时候,否则sum(n-1)+n;
斐波那契数列:一个典型的数列,每一项都是前两项的和。
求1-n之间所有素数的和:
1.首先判断素数,从2到n-1之间,如果有一个可以整除n,那么就不是素数,否则就是素数。是返回1,不是返回0.
for(i=2;i<n;i++)//循环实现
{
if(n%i==0)
return 0;
}
return 1;
int issu(int n,int key)//递归实现
{
if(n<2)
return 1;
if(n==key)
return 1;
if(n%key==0)
return 0;
else
return issu(n,key+1);
}
2.对素数的求和,如果是素数就相加,否则往下递归。
递归会导致债的操作过多。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2