C语言_数组的查找替换排序拼接

【C语言_数组的查找替换排序拼接】博观而约取,厚积而薄发。这篇文章主要讲述C语言_数组的查找替换排序拼接相关的知识,希望能为你提供帮助。
这篇文章主要是总结C语言的位运算几个实战例子,接着介绍数组的基本定义用法、数组排序、插入、拼接、删除、字符串查找替换等。
1. 颜色转换的例子

1.颜色转换的例子:RGB888RGB565RGB666…. int data=https://www.songbingjia.com/android/12345; //RGB888的颜色 要求将data转为RGB565-去掉高位 示例: /* int data=10101010101010101010101011184810R:01010 G:101010 B:0101001010101010010102183410101010 00111111 */#include < stdio.h> int main(int argc, char * argv[])unsigned short rgb565_c; unsigned int data=11184810; //RGB888 unsigned char r=(data> > 16)& 0xFF; unsigned char g=(data> > 8)& 0xFF; unsigned char b=(data> > 0)& 0xFF; printf("RGB88_r=0x%X\\n",r); printf("RGB88_g=0x%X\\n",g); printf("RGB88_b=0x%X\\n",b); r& =0x1F; //5 g& =0x3F; //6 b& =0x1F; //5rgb565_c=(r< < 11)|(g< < 5)|(b< < 0); printf("rgb565_c=%d\\n",rgb565_c); return 0;

2. 位运算综合练习
2.位运算综合练习#include < stdio.h> int main(int argc,char **argv)/*1. 存放数据*/ data|=A< < 24; data|=B< < 16; //F data|=C< < 8; data|=D< < 0; /*2. 修改数据*/ data& =~(0xFF< < 8*2); //清除指定位 data|=F< < 16; /*3. 取出数据*/ printf("%c\\n",(data> > 24)& 0xFF); printf("%c\\n",(data> > 16)& 0xFF); printf("%c\\n",(data> > 8)& 0xFF); printf("%c\\n",(data> > 0)& 0xFF); return 0;

3. 位运算实际的运用
3.实际的运用shortc1=1234; //R占11~15位G占2~7位 shortc2=4567; //B占 11~15位 RGB565; 要求:将以上RGB分量提取出来,存在另一个变量(16位的变量)中—RGB565。 unsigned int data_1; //整型4个字节 unsigned short data_2; //短整型 2个字节 unsigned long data_3; //长整型 4个字节 unsigned long long data_3; //双长整型8个字节示例: /* shortc1=1234; //R占11~15位G占2~7位 shortc2=4567; //B占 11~15位c1=10101010101010101010101011184810 c2=10101010101010101010101011184810r: 10101 g: 101010 b: 10101 rgb565=101011010101010144373 */#include < stdio.h> int main(int argc, char * argv[])unsigned int c1=11184810; unsigned int c2=11184810; unsigned char r,g,b; unsigned short c3; /*1. 转换为RGB888*/ r=c1> > 8; g=c1& 0xFF; b=c2> > 8; /*2. 转换为RGB565*/ r=r> > 3; g=g> > 2; b=b> > 3; /*3. 组合颜色*/ c3=(r< < 11)|(g< < 5)|(b< < 0); printf("c3=%d\\n",c3); return 0;

4. 数组特点介绍
内存空间: 都是连续的---线性空间。 数组类型定义:< 数据类型> 数组的名称[数组的大小]; intbuff[100]; 数组的特性: (1)数组的空间是连续的。就是同类型变量的集合 (2)数组里只能存放相同类型的数据 (3)数组的下标是从0开始 (4)数组在定义的时候,必须得有一个合法空间。 int buff[]; #include < stdio.h> int main(int argc, char * argv[])int buff_int[100]; //空间是多大? 400字节 //下标范围: 0~99char buff_char[100]; //空间是多大?100字节 //下标范围:0~99 return 0; 数组示例: #include < stdio.h> int main(int argc, char * argv[])int buff1[]=1,2,3,4,5,6,7,8,9,0; //大小以数据数量为准 int buff2[1]; //空间定义必须大于0printf("%d\\n",buff1[0]); //1 printf("%d\\n",buff1[2]); //3 printf("%d\\n",buff1[4]); //5 return 0; 数组的数据倒序输出:#include < stdio.h> int main(int argc, char * argv[])int buff1[]=1,2,3,4,5,6,7,8,9,0; //大小以数据数量为准 int i; for(i=0; i< 10; i++)printf("%d ",buff1[9-i]); return 0; //数组的初始化 /* 1. 数组什么时候可以整体赋值?只有在数组定义的时候 2. 数组的空间必须是常量 (C89) 错误: int data=https://www.songbingjia.com/android/100; int buff[data]; 3. 数组的下标是从0开始 */ 数组定义: (1)一维数组char data[100]; (2)二维数组char data[100][100]; (3)三维数组char data[100][100][100]; ………….题目:#include < stdio.h> int main(int argc, char * argv[])int i; float buff[5]; //buff的名称是首地址 float sum=0; printf("输入成绩:"); for(i=0; i< 5; i++)scanf("%f",& buff[i]); for(i=0; i< 5; i++)sum+=buff[i]; printf("sum=%f\\n",sum/5); return 0;

5. *号显示中文
6.显示中文 通过*号打印出自己的名字。 #include < stdio.h> int main(int argc, char * argv[])unsigned char buff[]=0x08,0x08,0x7E,0x4A,0x7E,0x08,0x08,0x08; int i,j; unsigned char data; for(i=0; i< 8; i++)data=https://www.songbingjia.com/android/buff[i]; for(j=0; j< 8; j++)if(data& 0x80)printf("*"); else printf(" "); data< < =1; //依次判断高位printf("\\n"); return 0; /* 8*80000 10000x08 0000 10000x08 0111 11100x7E 0100 10100x4A 0111 11100x7E 0000 10000x08 0000 10000x08 0000 10000x08 */汉字显示示例代码: #include < stdio.h> int main(int argc, char * argv[])unsigned char buff[]=/*--文字:中--*/ /*--宋体12; 此字体下对应的点阵为:宽x高=16x16--*/ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08, 0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, ; int i,j; int cnt=0; unsigned char data; for(i=0; i< 32; i++)data=https://www.songbingjia.com/android/buff[i]; for(j=0; j< 8; j++)if(data& 0x80)printf("*"); else printf(" "); data< < =1; //依次判断高位 cnt++; if(cnt==16)cnt=0; printf("\\n"); return 0;

6. 数组的数据插入
1.数组的数据插入: int a[]=1,2,3,4,5,6,7; 在第2位数据后插入一个888 最终 int a[]=1,2,888,3,4,5,6,7; #include < stdio.h> int main(int argc, char * argv[])int buff[50]=1,2,3,4,5,6,7,8,9,10; int addr=2; //插入的位置(以正常数字计数) int len=10; //源数组里的数据长度 int data=https://www.songbingjia.com/android/888; //将要插入的数据 int i; /*1. 依次将数据向后移动*/ for(i=len-1; i> =addr-1; i--)buff[i+1]=buff[i]; buff[addr-1]=data; //插入数据 len++; //长度加1/*2. 打印最终的结果*/ for(i=0; i< len; i++)printf("%d ",buff[i]); return 0;

7. 数组数据的删除
2.数组数据的删除 int a[]=1,2,3,4,5,6,7; 将第2位数据删除掉 最终 int a[]=1,3,4,5,6,7; #include < stdio.h> int main(int argc, char * argv[])int buff[50]=1,2,3,4,5,6,7,8,9,10; int addr=2; //删除的位置(以正常数字计数) int len=10; //源数组里的数据长度 int i; /*1. 向前覆盖数据*/ for(i=addr-1; i< len-1; i++)buff[i]=buff[i+1]; len--; /*2.打印最终结果*/ for(i=0; i< len; i++)printf("%d ",buff[i]); return 0;

8. 数组数据排序----冒泡排序
3.数组数据排序----冒泡排序 int a[]=1,2,3,4,5,6,7; 最终 int a[]=7,6,5,4,3,2,1; ?基本排序 #include < stdio.h> int main(int argc, char * argv[])//将要排序的数组 int buff[10]=12,67,34,89,54,15,90,58,66,88; int tmp; int i,j; int len=10; //数组的长度 //排序 for(i=0; i< len-1; i++) //比较的轮数for(j=0; j< len-1; j++) //每轮的次数if(buff[j]> buff[j+1])tmp=buff[j]; buff[j]=buff[j+1]; buff[j+1]=tmp; for(i=0; i< len; i++) printf("%d ",buff[i]); return 0; ?优化代码#include < stdio.h> int main(int argc, char * argv[])//将要排序的数组 int buff[10]=1,2,3,4,5,6,7,8,9,10; int tmp; int i,j; int len=10; //数组的长度 int cnt=0; //排序 for(i=0; i< len-1; i++) //比较的轮数for(j=0; j< len-1-i; j++) //每轮的次数if(buff[j]< buff[j+1]) //从大到小排序tmp=buff[j]; buff[j]=buff[j+1]; buff[j+1]=tmp; cnt++; printf("cnt=%d\\n",cnt); for(i=0; i< len; i++) printf("%d ",buff[i]); return 0; ?最终优化代码#include < stdio.h> int main(int argc, char * argv[])//将要排序的数组 int buff[10]=1,2,3,4,5,6,7,8,9,10; int tmp; int i,j; int len=10; //数组的长度 int cnt=0; int flag=0; //是否需要排序的标志位//排序 for(i=0; i< len-1; i++) //比较的轮数for(j=0; j< len-1-i; j++) //每轮的次数if(buff[j]> buff[j+1]) //从小到大排序tmp=buff[j]; buff[j]=buff[j+1]; buff[j+1]=tmp; flag=1; //标记排序一次cnt++; if(flag) //上一次排过序flag=0; //清除标志位elsebreak; printf("cnt=%d\\n",cnt); for(i=0; i< len; i++) printf("%d ",buff[i]); return 0;

9. 数组拼接
4.数组数据的拼接 int a[]=1,3,4,5,6,7; int b[]=11,13,14,15,16,17; 将a和b拼接到c数组里。 最终int c[]=1,3,4,5,6,7, 11,13,14,15,16,17 示例: #include < stdio.h> int main(int argc, char * argv[])int buff1[50]=1,2,3,4,5,6,7,8,9,10; int buff2[10]=11,12,13,14,15,16,17,18,19,20; int len1=10; //源数据长度 int len2=10; //插入的数据长度 int i; for(i=0; i< len2; i++)buff1[len1+i]=buff2[i]; //实现数据拼接len1+=len2; //最终数据长度 for(i=0; i< len1; i++)printf("%d ",buff1[i]); return 0;

10. 字符串查找与替换
字符串数组有一个约定:结尾有’\\0’ char buff[]=A,B,C,D; //字符数组定义 charbuff[]="ABCD"; //字符串数组定义 char buff[]=A,B,C,D,\\0; //字符串数组定义 “”//双引号之前默认有’\\0’ #include < stdio.h> int main(int argc, char * argv[])char str[]="嵌入式开发"; //字符串数组--文本数据 int i=0; for(i=0; str[i]!=\\0; i++) printf("i=%d\\n",i); return 0; ?查找与替换 #include < stdio.h> int main(int argc, char * argv[])int buff[]=123,456,123,56,567,123,567; int cnt=0,i=0; for(i=0; i< 7; i++)if(buff[i]==123) //查找buff[i]=888; //替换 cnt++; printf("cnt=%d\\n",cnt); for(i=0; i< 7; i++)printf("%d ",buff[i]); return 0; 作业: 1.字符串排序。 “24RERFER8RTBJV” 2.字符串插入:“1234567890” 在第2个位置后面插入”ABC” 最终结果: “12ABC34567890” 3.字符串查找: “123456123abc123hbc” 查找字符串”123”的数量。数量是3 4.字符串删除:“1234567890” 删除”456”最终结果: “1237890” 5.字符串替换 字符串”1234567890” 将456替换为”888” 最终: “1238887890” 需要考虑3种情况


    推荐阅读