RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言_數(shù)組的查找、替換、排序、拼接

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:48 ? 次閱讀

這篇文章主要是總結(jié)C語(yǔ)言的位運(yùn)算幾個(gè)實(shí)戰(zhàn)例子,接著介紹數(shù)組的基本定義用法、數(shù)組排序、插入、拼接、刪除、字符串查找替換等。

1. 顏色轉(zhuǎn)換的例子

1.顏色轉(zhuǎn)換的例子:  RGB888  RGB565  RGB666…. 
   int data=12345; //RGB888的顏色
   要求將data轉(zhuǎn)為RGB565    -去掉高位
 示例:
/*
int data=101010101010101010101010  11184810

R:01010
G:101010
B:01010

0101010101001010  21834

10101010
00111111
*/

#include 
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; //5
   
   rgb565_c=(r<<11)|(g<<5)|(b<<0);
   printf("rgb565_c=%d\n",rgb565_c);
	return 0;
}

2. 位運(yùn)算綜合練習(xí)

2.位運(yùn)算綜合練習(xí)

#include 
int main(int argc,char **argv)
{
	
	/*1. 存放數(shù)據(jù)*/
	data|='A'<<24;
	data|='B'<<16; //F
	data|='C'<<8;
	data|='D'<<0;
	
	/*2. 修改數(shù)據(jù)*/
	data&=~(0xFF<<8*2); //清除指定位
	data|='F'<<16;

	/*3. 取出數(shù)據(jù)*/
	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. 位運(yùn)算實(shí)際的運(yùn)用

3.實(shí)際的運(yùn)用

short  c1=1234; //R占11~15位  G占2~7位
short  c2=4567; //B占 11~15位
RGB565; 
要求:  將以上RGB分量提取出來(lái),存在另一個(gè)變量(16位的變量)中—RGB565  。
unsigned int data_1;   //整型   4個(gè)字節(jié)
	unsigned short data_2; //短整型 2個(gè)字節(jié)
   unsigned long data_3;  //長(zhǎng)整型 4個(gè)字節(jié)
   unsigned long long data_3;  //雙長(zhǎng)整型  8個(gè)字節(jié)

示例:
/*
short  c1=1234; //R占11~15位  G占2~7位
short  c2=4567; //B占 11~15位

c1=101010101010101010101010    11184810
c2=101010101010101010101010    11184810

r: 10101
g: 101010
b: 10101
rgb565=1010110101010101  44373
*/

#include 
int main(int argc, char * argv[])
{
	unsigned int c1=11184810;
   unsigned int c2=11184810;
   unsigned char r,g,b;
	unsigned short c3;
	/*1. 轉(zhuǎn)換為RGB888*/
   r=c1>>8;
   g=c1&0xFF;
   b=c2>>8;
   
   /*2. 轉(zhuǎn)換為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. 數(shù)組特點(diǎn)介紹

內(nèi)存空間: 都是連續(xù)的---線性空間。
數(shù)組類型定義:  <數(shù)據(jù)類型> 數(shù)組的名稱[數(shù)組的大小]; 
                 int            buff[100];
數(shù)組的特性:
(1)數(shù)組的空間是連續(xù)的。  就是同類型變量的集合
(2)數(shù)組里只能存放相同類型的數(shù)據(jù)
(3)數(shù)組的下標(biāo)是從0開始
(4)數(shù)組在定義的時(shí)候,必須得有一個(gè)合法空間。 int buff[];  

#include 
int main(int argc, char * argv[])
{
	int buff_int[100]; //空間是多大? 400字節(jié)
	//下標(biāo)范圍: 0~99
   
   char buff_char[100]; //空間是多大?100字節(jié)
   //下標(biāo)范圍:0~99
	return 0;
}
數(shù)組示例:
#include 
int main(int argc, char * argv[])
{
	int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以數(shù)據(jù)數(shù)量為準(zhǔn)
	int buff2[1]; //空間定義必須大于0
   
   printf("%d\n",buff1[0]); //1
   printf("%d\n",buff1[2]); //3
   printf("%d\n",buff1[4]); //5
	return 0;
}
數(shù)組的數(shù)據(jù)倒序輸出:

#include 
int main(int argc, char * argv[])
{
	int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以數(shù)據(jù)數(shù)量為準(zhǔn)
	int i;
   for(i=0;i<10;i++)
   {
		printf("%d ",buff1[9-i]);
   }
	return 0;
}

//數(shù)組的初始化
   /*
		1. 數(shù)組什么時(shí)候可以整體賦值?只有在數(shù)組定義的時(shí)候
	     2. 數(shù)組的空間必須是常量 (C89)
	       錯(cuò)誤:
		       int data=100;
				 int buff[data];
		3. 數(shù)組的下標(biāo)是從0開始
   */
數(shù)組定義:
(1)一維數(shù)組  char data[100];
(2)二維數(shù)組  char data[100][100];
(3)三維數(shù)組  char data[100][100][100]; ………….

題目:

#include 
int main(int argc, char * argv[])
{
	int i;
   float buff[5]; //buff的名稱是首地址
	float sum=0;
   printf("輸入成績(jī):");
   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. *號(hào)顯示中文

6.  顯示中文
  通過(guò)*號(hào)打印出自己的名字。
#include 
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=buff[i];
		for(j=0;j<8;j++)
		{
			if(data&0x80)printf("*");
			else printf(" ");
			data<<=1; //依次判斷高位
	   }
	   printf("\n");
   }
   return 0;
}

/*
8*8

0000 1000  0x08
0000 1000  0x08
0111 1110  0x7E
0100 1010  0x4A
0111 1110  0x7E
0000 1000  0x08
0000 1000  0x08
0000 1000  0x08
*/
漢字顯示示例代碼:
#include 
int main(int argc, char * argv[])
{
   unsigned char buff[]=
  {
	/*--  文字:  中  --*/
	/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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=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. 數(shù)組的數(shù)據(jù)插入

1.數(shù)組的數(shù)據(jù)插入:  
   int a[]={1,2,3,4,5,6,7};  在第2位數(shù)據(jù)后插入一個(gè)888
  最終 int a[]={1,2,888,3,4,5,6,7};
#include 
int main(int argc, char * argv[])
{
	int buff[50]={1,2,3,4,5,6,7,8,9,10};
	int addr=2; //插入的位置(以正常數(shù)字計(jì)數(shù))
	int len=10; //源數(shù)組里的數(shù)據(jù)長(zhǎng)度
   int data=888; //將要插入的數(shù)據(jù)
   int i;
   
   /*1. 依次將數(shù)據(jù)向后移動(dòng)*/
   for(i=len-1;i>=addr-1;i--)
   {
		buff[i+1]=buff[i];
   }
   buff[addr-1]=data; //插入數(shù)據(jù)
   len++;  //長(zhǎng)度加1
   
   /*2. 打印最終的結(jié)果*/
   for(i=0;i;i++)>

7. 數(shù)組數(shù)據(jù)的刪除

2.數(shù)組數(shù)據(jù)的刪除
  int a[]={1,2,3,4,5,6,7};  將第2位數(shù)據(jù)刪除掉
  最終 int a[]={1,3,4,5,6,7};
#include 
int main(int argc, char * argv[])
{
	int buff[50]={1,2,3,4,5,6,7,8,9,10};
	int addr=2; //刪除的位置(以正常數(shù)字計(jì)數(shù))
	int len=10; //源數(shù)組里的數(shù)據(jù)長(zhǎng)度
	int i;
   
   /*1. 向前覆蓋數(shù)據(jù)*/
   for(i=addr-1;i;i++)>

8. 數(shù)組數(shù)據(jù)排序----冒泡排序

3.數(shù)組數(shù)據(jù)排序----冒泡排序
   int a[]={1,2,3,4,5,6,7};     最終 int a[]={7,6,5,4,3,2,1};
?基本排序
#include 
int main(int argc, char * argv[])
{
	//將要排序的數(shù)組
	int buff[10]={12,67,34,89,54,15,90,58,66,88};
	int tmp;
	int i,j;
	int len=10; //數(shù)組的長(zhǎng)度
	//排序
   for(i=0;ibuff[j+1])
			{
				tmp=buff[j];
				buff[j]=buff[j+1];
				buff[j+1]=tmp;
		   }
	   }
   }
   
   for(i=0;i
int main(int argc, char * argv[])
{
	//將要排序的數(shù)組
	int buff[10]={1,2,3,4,5,6,7,8,9,10};
	int tmp;
	int i,j;
	int len=10; //數(shù)組的長(zhǎng)度
   int cnt=0;
	//排序
   for(i=0;i;i++)>;j++)>;i++)>;i++)>

9. 數(shù)組拼接

4.數(shù)組數(shù)據(jù)的拼接
     int a[]={1,3,4,5,6,7};   int b[]={11,13,14,15,16,17};
    將a和b拼接到c數(shù)組里。 最終int c[]={1,3,4,5,6,7, 11,13,14,15,16,17}
示例:
#include 
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; //源數(shù)據(jù)長(zhǎng)度
   int len2=10;  //插入的數(shù)據(jù)長(zhǎng)度
   int i;
   for(i=0;i;i++)>

10. 字符串查找與替換

字符串?dāng)?shù)組有一個(gè)約定:  結(jié)尾有’\0’
char buff[]={'A','B','C','D'}; //字符數(shù)組定義
   char  buff[]="ABCD"; //字符串?dāng)?shù)組定義
   char buff[]={'A','B','C','D','\0'}; //字符串?dāng)?shù)組定義
“”  //雙引號(hào)之前默認(rèn)有’\0’ 
#include 
int main(int argc, char * argv[])
{
	char str[]="嵌入式開發(fā)"; //字符串?dāng)?shù)組--文本數(shù)據(jù)
   int i=0;
   for(i=0;str[i]!='\0';i++){}
   printf("i=%d\n",i);
   return 0;
}

?查找與替換
#include 
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;
}

作業(yè):
1.字符串排序。 “24RERFER8RTBJV”  
2.字符串插入:  “1234567890” 
在第2個(gè)位置后面插入”ABC”
最終結(jié)果: “12ABC34567890”
3.字符串查找: “123456123abc123hbc”
  查找字符串”123”的數(shù)量。  數(shù)量是3
4.字符串刪除:  “1234567890”
刪除”456”  最終結(jié)果: “1237890”
5.字符串替換
字符串”1234567890”
將456替換為”888”
 最終: “1238887890”
需要考慮3種情況
  
審核編輯:湯梓紅
;j++)>;j++)>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136683
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    25939
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言數(shù)組詳解

    介紹C語(yǔ)言數(shù)組的知識(shí)點(diǎn)。
    的頭像 發(fā)表于 05-19 10:15 ?6306次閱讀

    C語(yǔ)言入門教程-數(shù)組

    數(shù)組 本節(jié)我們將用C寫一個(gè)小程序隨機(jī)生成10個(gè)數(shù),并對(duì)其進(jìn)行排序。我們將使用一種新的變量結(jié)構(gòu)
    發(fā)表于 07-29 11:03 ?802次閱讀

    C語(yǔ)言教程之希爾排序

    C語(yǔ)言教程之希爾排序,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-22 11:06 ?0次下載

    C語(yǔ)言教程之選擇排序

    C語(yǔ)言教程之選擇排序,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-22 11:06 ?0次下載

    C語(yǔ)言教程之查找數(shù)組中的最值

    C語(yǔ)言教程之查找數(shù)組中的最值,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-25 15:13 ?0次下載

    C語(yǔ)言教程之對(duì)數(shù)組進(jìn)行升序和降序排序

    C語(yǔ)言教程之對(duì)數(shù)組進(jìn)行升序和降序排序,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-25 16:09 ?0次下載

    基于C語(yǔ)言二分查找排序源代碼

    本文檔內(nèi)容介紹了C語(yǔ)言歸并、選擇、直接插入、希爾、冒泡、快速、堆排序與順序、二分查找排序源代碼,分享給大家供大家參考。
    發(fā)表于 01-04 11:24 ?1次下載

    學(xué)習(xí)C語(yǔ)言的目標(biāo)和方法有哪些及C語(yǔ)言的關(guān)鍵字說(shuō)明

     一、學(xué)習(xí)C語(yǔ)言的目標(biāo)主要是:1. 熟練掌握C語(yǔ)言的關(guān)鍵字,語(yǔ)法規(guī)則,程序控制等;2. 掌握基本的數(shù)據(jù)結(jié)構(gòu),數(shù)組、鏈表、棧和隊(duì)列等;3. 掌
    發(fā)表于 08-02 17:34 ?1次下載
    學(xué)習(xí)<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的目標(biāo)和方法有哪些及<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的關(guān)鍵字說(shuō)明

    C語(yǔ)言: Leetcode 33搜索旋轉(zhuǎn)排序數(shù)組

    假設(shè)按照升序排序數(shù)組在預(yù)先未知的某個(gè)點(diǎn)上進(jìn)行了旋轉(zhuǎn)。
    的頭像 發(fā)表于 06-22 08:51 ?1740次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>: Leetcode 33搜索旋轉(zhuǎn)<b class='flag-5'>排序數(shù)組</b>

    筑基_C_5_對(duì)數(shù)組的二分查找

    C語(yǔ)言泛型編程,實(shí)現(xiàn)對(duì)數(shù)組中某元素的二分查找
    發(fā)表于 12-06 10:21 ?9次下載
    筑基_<b class='flag-5'>C</b>_5_對(duì)<b class='flag-5'>數(shù)組</b>的二分<b class='flag-5'>查找</b>

    C語(yǔ)言總結(jié)_數(shù)組全方位練習(xí)

    C語(yǔ)言數(shù)組的練習(xí)題:涉及到數(shù)組插入、數(shù)組刪除、數(shù)組下標(biāo)數(shù)據(jù)的左移右移、
    的頭像 發(fā)表于 08-14 09:34 ?889次閱讀

    C語(yǔ)言總結(jié)_數(shù)組知識(shí)

    當(dāng)前文章復(fù)盤C語(yǔ)言數(shù)組數(shù)組定義規(guī)則、數(shù)組空間類型、數(shù)組下標(biāo)使用、
    的頭像 發(fā)表于 08-14 09:38 ?1301次閱讀

    c語(yǔ)言數(shù)組查找指定元素

    C語(yǔ)言是一種通用的編程語(yǔ)言,廣泛應(yīng)用于各種領(lǐng)域,包括嵌入式系統(tǒng)、操作系統(tǒng)、游戲開發(fā)等。在C語(yǔ)言中,數(shù)組
    的頭像 發(fā)表于 11-24 10:07 ?4157次閱讀

    C語(yǔ)言如何創(chuàng)建數(shù)組

    C語(yǔ)言是一種非常強(qiáng)大和靈活的編程語(yǔ)言,它提供了若干數(shù)據(jù)類型來(lái)存儲(chǔ)和操作數(shù)據(jù)。其中之一就是數(shù)組,它可以用來(lái)存儲(chǔ)一系列具有相同數(shù)據(jù)類型的元素。本文將詳細(xì)介紹如何在
    的頭像 發(fā)表于 11-24 10:08 ?1891次閱讀

    c語(yǔ)言數(shù)組怎么定義

    C語(yǔ)言中,數(shù)組是一種用來(lái)存儲(chǔ)相同類型元素的數(shù)據(jù)結(jié)構(gòu)。它可以存儲(chǔ)多個(gè)元素,并通過(guò)一個(gè)共同的名稱來(lái)引用這些元素。數(shù)組是一種很重要的數(shù)據(jù)結(jié)構(gòu),可以用于解決很多實(shí)際的問題。 在
    的頭像 發(fā)表于 11-24 10:11 ?3051次閱讀
    RM新时代网站-首页