黑马程序员———C语言———【strlen()和sizeof()的区别、排序、算法】
来源:互联网 发布:关键词搜索软件 编辑:程序博客网 时间:2024/06/04 19:25
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
——————————————————————————————————————————————————————————————————
1、strlen()是函数。
strlen()是以字符为单位计算字符串或字符数组的实际长度(不考虑末尾的\0),如果字符串字符数组中间有\0,则计算\0之前的长度。
如:
char a[]="heima";char b[]={'h','e','i','m','a'};printf("a=%d\n",strlen(a)); //a=5printf("b=%d\n",strlen(b)); //b=5
char a[]="he\0ima";char b[]={'h','e','\0','i','m','a'};printf("a=%d\n",strlen(a)); //a=2printf("b=%d\n",strlen(b)); //b=2
2、sizeof是关键字,后面的()可写可不写
(1)sizeof计算字符串的长度,是字符串实际长度+1。
char a[]="heima";printf("a=%d\n",sizeof(a)); //a=6
(2)sizeof计算字符串的长度,如果字符串中间有\0,没有影响。
(3)sizeof计算字符数组的长度,就是字符数组实际的长度,中间有\0不影响
char b[]={'h','e','\0','i','m','a'};printf("b=%d\n",sizeof(b)); //b=6
综上:自定义的字符串系统自动给字符串加上结束符\0,字符数组结束系统不会自动加上结束符\0
3、冒泡排序
void main(char argc,const char * argv[]){//从键盘获取10个数放入到数组中,然后找出10个数中最大的数//定义变量,记录10个数字中的最大值int max=0;//创建数组int numbers[10];//记录数组长度int length=sizeof(numbers)/sizeof(int);//使用for循环,循环输入10个数字,并放入到数组for(int i=0;i<length;i++){//提示用户输入10个数字printf("请输入%d个数字:",i+1);scanf("%d\n",&numbers[i]);}//冒泡排序,有n个数,就循环n-1次//外层为什么要length-1?//4个数互相比较需要比3次,3个数互相比较需要比2次,所以n个数比较就要比n-1次for(int i=0;i<length-1;i++){//内层为什么要length-n?//外层每循环一次,都会有一个数字下沉,循环两次就有两个数字下沉,n次就会有n个数字下沉//为了程序更有效率的对数字排序,我们将已经下沉的数字不再参与到下次的比较,也就是让剩下的数进行比较//length-n就是n次循环后剩下的数字的个数,length-n-1就是剩下的数字需要互相比较的次数for(int j=0;j<length-1-i;j++){if(numbers[j]>numbers[j+1]){//max相当于中转站,让两个数互转位置的同时不至于丢失其中一个数据max=numbers[j];numbers[j]=numbers[j+1];numbers[j+1]=max;}}}//for循环打印排序后的数组for(int i=0;i<length;i++){printf("%d \n",numbers[i]);}}
4、选择排序
//选择排序,从小到大排列。void main(char argc.const char * argv[]){int number[6]={2,1,3,7,4,9};int temp=0;int length=sizeof(number)/sizeof(int);for(int i=0;i<length-1;i++){for(int j=i+1;j<length;j++){if(number[i]>number[j]){temp=number[i];number[i]=number[j];number[j]=temp;}}}}
5、折半查找
//如果key大于中间值,则让最小值=中间值+1//如果key小于中间值,则让最大值=中间值-1//如果最小值大于最大值,则证明要找的数不存在void main(char argc.const char * argv[]){int number[]={3,4,12,20,21,23,28,45,67,100};//查找20int low=0;int high=sizeof(number)/sizeof(int)-1;int mid=0;//要查找的数int key=20;while(min<=max){mid=(low+high)/2;if(key>number[mid]){low=mid+1;}else if(key<number[mid]){high=mid-1;}else{printf("找到了");}}printf("没找到");}
6、约瑟夫环
/*耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)*/#include <stdio.h>#include <stdlib.h>void main(){ //先初始化人 int people[100]; int len=sizeof(people)/sizeof(int); for(int i=0;i<len;i++){ people[i]=i+1; } //队列里的人 int left=len; //当前的人报的数 int counter=0; //控制while循环 int j=0; while(1){ //只要这个人的值不为0,就让这个人喊数,函数范围是1 2 3 if(people[j]>0){ counter++; } //每当有人喊3的时候,就从队列中走一个人,同时让喊3的这个人变成0 //并且让下一个喊数的人从0开始喊,这样在下一次循环的时候,counter+1,这个人喊的数就变成了1 if(counter==3){ left--; people[j]=0; counter=0; } //当队列里只剩一个人的时候退出 if(left==1){ break; } j++; //以下是测试 printf("j=%d,people[j]=%d,counter=%d,left=%d\n",j,people[j],counter,left); //防止数组越界 //if(j==len){ // j=0; //} //测试的小技巧,按回车继续 //getchar(); } for(int i=0;i<len;i++){ if(people[i]>0){ printf("这个数是:%d,索引是:%d",people[i],i); } }}
1 0
- 黑马程序员———C语言———【strlen()和sizeof()的区别、排序、算法】
- ——黑马程序员——C语言基础--sizeof运算符和strlen 函数的区别总结
- C语言专题——sizeof()与strlen()的区别
- C/C++——sizeof和strlen的区别
- 黑马程序员——C语言基础——sizeof、strlen、printf小结
- C学习——sizeof和strlen的区别
- 黑马程序员—C学习笔记—补充字符串总结(定义、赋值、sizeof、strlen)
- C语言sizeof 和 strlen 的区别
- C语言sizeof 和 strlen 的区别
- C语言之——strlen()与sizeof()
- 黑马程序员——C语言的冒泡排序
- 黑马程序员——C语言的冒泡排序
- 黑马程序员——C语言之指针数组和数组指针的区别
- c语言中strlen 和 sizeof的区别
- C语言的sizeof和strlen区别与联系
- C语言中sizeof和strlen的区别
- C语言里strlen和sizeof的区别
- c语言006-sizeof/strlen的使用和区别
- Android SDK Manager不能显示所有包的解决办法
- 欢迎使用CSDN-markdown编辑器
- OC中数组的四种遍历方式
- 线程初体验之跑马灯
- 二维数组操作
- 黑马程序员———C语言———【strlen()和sizeof()的区别、排序、算法】
- 多重背包 (n种物品,每种m个)
- 判断json的长度
- bootcmd和bootargs参数
- JS创建对象的几种方式
- python 转化object 到json 然后存入redis以及从redis读取
- 从源码角度分析view的layout过程
- python 精华之函数式编程
- 成员了变量的作用域