字符串比较函数
忽略大小写的字符串比较函数 strcasecmp
- 头文件:
#include<string.h>
- 函数说明:
strcasecmp()用来比较参数s1和s2的字符串,比较时会自动忽略大小写的差异。
- 返回值
返回说明 | 返回值 |
---|---|
相等 | 返回0 |
如果s1>s2 | 返回大于0的 |
如果s1 |
#include<string.h>
int main(void)
{
char *a="aBcDeF";
char *b="AbCdeF";
if(!strcasecmp(a,b))
printf("%s=%s\n",a,b);
}
数据结构中的一些基础概念
时间复杂度
- 算法的效率主要由一下两个复杂度来评估:
- 时间复杂度:评估执行程序所要的时间。可以估算出程序对处理器的使用程度。
- 空间复杂度:评估执行程序所要的存储空间。可以估算出程序对计算机内存的使用程度。
时间复杂度
- 时间频度:一个算法执行所消耗的时间,必须上机运行测试才能知道。我们只需知道那个算法花费的时间多就可以了,并且一个算法花费的时间与算法中语句的执行次数成正比。一个算法中语句执行次数成为频度或时间频度,记为T(n)。
- 时间复杂度:n称为问题的规模,当n变时,T(n)也变,相知变化时规律,引入时间复杂度,如有某个辅助函数f(n),当n趋于正无穷时,T(n)/f(n)的极限值为不等于0 的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n))。
大O表示法
大O表示 | 含义 |
---|---|
O(1) | 常数阶 |
O(n) | 线性阶 |
O(logn) | 对数阶 |
O(n2) | 平方阶 |
O(nlogn) | nlogn阶 |
O(n3) | 立方阶 |
* 推到大O阶
- 用常数1来取代运行时间中所有加法常数
- 修改后的运行次数函数中,只保留最高阶项
如果最高阶项存在且不是1,则去除与这个阶相乘的常数
- 常数阶
int sun=0,n=100;//执行一次 sum=(1+n)*n/2;//执行一次
上面算法运行的次数的函数为f(n)=2,根据上面的要点,将3改为1。所以这个算法的时间复杂度为O(1),如果int sum这条执行100遍,因为与n大小无关,所以还是为O(1)。
- 线性阶
for(int i=0;i<n;i++) { //时间复杂度为O(1)的算法 }
上面的算法循环体中执行了n次,所以为O(n)。
- 对数阶
int number=1; while(number<n) { number=number*2; //时间复杂度为O(1)的算法 }
随着number每次*2后,都会越来越接近n,当number不小于n时就会退出,假设循环x次,则x=log2n,所以为O(logn)。
- 平方阶
for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { //复杂度为O(1)的算法 } }
内层的复杂度O(n)在n次循环 所以复杂度为O(n2)。
写项目遇到的问题
- 字符串:
send(fd,str,strlen(str),0);
recv(sockfd,str,sizeof(str),0);
- 结构体
send(sockfd,&USER,sizeof(struct use),0);
C语言中的memset和bzero
memset:
void *memset(void *s,int c,size_t n);
- 作用:将已经开辟的内存空间s中钱n个字节替换成c并返回s。
- 头文件
#include<string.h>
- 在一段内存块中填充某个给定的值,是对较大的结构体或数组进行清零操作的一种方法。
bzero:
void bzero(void *s,size_t n);
- 作用:将内存空间s的前n个字节置零,包括(‘\0’),无返回值。
- 头文件
#include<string.h>