【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种情况
推荐阅读
- Go语言入门很简单(如何在 Go 语言中使用 MySQL)
- K8S-ConfigMap与Secret
- Linux系统基础入门知识文件管理
- ModStartCMS 模块化建站系统 v3.9.0
- 网络基础命令与基础拓扑搭建
- Python推导式
- JavaSE-03scanner用户交互
- 分布式|redis到底支不支持事务呢()
- 分布式|跟着“乐哉”学习redis系列教程-redis主从同步