要想把一個二維數(shù)組值全部替換成另一個二維數(shù)組的值,前提條件為二者的規(guī)模是相同的。即行數(shù)和列數(shù)分別相同。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比壽縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式壽縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋壽縣地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
假定均為M行N列,類型為int,即
int?a[M][N],?b[M][N];
要將a中所有值替換成b的值,有以下兩種方法。
1 逐一元素賦值。
使用雙重循環(huán),對數(shù)組元素遍歷并賦值。
代碼如下:
int?i,?j;
for(i?=?0;?i??M;?i?++)
for(j?=?0;?j??N;?j?++)
a[i][j]?=?b[i][j];//逐元素賦值。
2 整體復(fù)制內(nèi)存。
由于二者結(jié)構(gòu)相同,可以使用C庫函數(shù)memcpy來實現(xiàn)更高效的數(shù)據(jù)復(fù)制。
void?*memcpy(void?*dest,?const?void?*src,?size_t?n);
從源src所指的內(nèi)存地址的起始位置開始拷貝n個字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中。
調(diào)用該函數(shù)需要引用string.h頭文件。
代碼如下:
memcpy(b,?a,?sizeof(a));
只需要這樣一句就可以完成復(fù)制操作了。
可以使用的方式有很多,基本思路為打開文件,讀取文件中的數(shù)據(jù),處理后存入新文件,最終關(guān)閉兩個文件。
根據(jù)處理步驟,以常用的兩種方法舉例如下:
一、由于XX替換成0xXX適用于16進制轉(zhuǎn)換, 所以可以逐個讀取16進制值,然后帶上0x輸入到新的文件中。
參考代碼:
#include?stdio.h
int?main()
{
FILE?*in=fopen("in.txt","r"),?*out=fopen("out.txt",?"w");//打開兩個文件。
unsigned?char?c;
while(fscanf(in,?"%02X",?c)?!=?EOF)//循環(huán)獲取數(shù)據(jù)。
{
fprintf(out,?"0x%02X,",?c);//增加0x后輸出到新文件中。?
}
fclose(in);
fclose(out);//關(guān)閉文件。
return?0;
}
二、由于原始文件兩個16進制一組,所以每讀到兩個16進制數(shù)據(jù),即可認(rèn)為得到一個合法的16進制數(shù),可以依次作為輸入輸出依據(jù)。
參考代碼:
#include?stdio.h
int?main()
{
FILE?*in=fopen("in.txt","r"),?*out=fopen("out.txt",?"w");//打開兩個文件。
char?c[2];
int?t;
while(1)
{
t=fgetc(in);
if((t='0'?t='9')||?(t='a'?t='f')?||?(t='A'?t='F'))//合法16進制數(shù)
{
c[0]?=?t;
c[1]?=?fgetc(in);//獲取連續(xù)兩位。
fprintf(out,?"0x%c%c,",?c[0],c[1]);//增加0x后輸出到新文件中。?
}
else?if(t==EOF)?break;//到文件尾,退出循環(huán)
}
fclose(in);
fclose(out);//關(guān)閉文件。
return?0;
}
替換函數(shù)主要有strtr(),str_repalce()這兩個函數(shù)。
首先針對strtr函數(shù)第一種方式:
我們看看下面的舉例:
?php
echo strtr("I Love you","Lo","lO");
?
得到的結(jié)果是:
I lOve yOu
這個結(jié)果提醒我們:
1.strtr它是區(qū)分大小寫的
2.strtr的替換是很特殊的,你注意看后面那個yOu,中間的O被替換的,這顯然不是我們的本意。
再舉一個特殊例子,說明這個php的sttr函數(shù)的怪異
?php
echo strtr("I Love you","Love","");
?
結(jié)果是:
I Love you
什么也不會改變,所以strtr需要注意的是:
3.不能被替換為空,也就是末位那個參數(shù)不能是空字符串,當(dāng)然空格是可以的。
再次舉例strtr函數(shù)的另一種情況:
?php
echo strtr("I Loves you","Love","lOvEA");
?
結(jié)果是:
I lOvEs yOu
注意看第三個參數(shù)的A,在結(jié)果中并沒有出現(xiàn)。
4.我不建議用strtr以少換多。
ok,既然這個strtr函數(shù)挺麻煩為什么還要用呢?
原因是,它的速度很快。據(jù)說,strtr 比 str_replace 快四倍。
5.能用strtr函數(shù)的時候一定要用。
第二種情況:
strtr(string,array)
6.strtr符合意愿的使用方法
?php
$table_change = array('you'='her sister');
echo strtr("I Love you",$table_change);
?
結(jié)果為:
I Love her sister
7.小技巧:你想到替換什么你就往數(shù)組加什么
比如:
?php
$table_change = array('you'='her sister');
$table_change += array('Love' = 'hate');
echo strtr("I Love you",$table_change);
?
結(jié)果是:
I hate her sister
再次提醒那個Love 寫成love 是行不通的哦。
字符串取代。
語法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函數(shù)種類: 資料處理
內(nèi)容說明
本函數(shù)將字符串 str 代入 haystack 字符串中,將所有的 needle 置換成 str。
下例將 %body% 以 black 取代
?php
$bodytag = str_replace("%body%", "black", "body text=%body%");
echo $bodytag;
?
格式:
[@str_replace("要替換的舊內(nèi)容", "要取代原內(nèi)容的新字符", $被替換內(nèi)容的變量名)]
[@str_replace(array('舊1','舊2','舊3'), array('新1','新2','新3'), $被替換內(nèi)容的變量名)]
[@str_replace(array('舊1','舊2','舊3'), '新內(nèi)容', $被替換內(nèi)容的變量名)]
實例:
多對一替換:想把內(nèi)容字段里所有的p/p標(biāo)簽清除掉,替換成空 [@str_replace(array('p','/p'), '', $Content)]
一對一替換:想把內(nèi)容字段里所有的br標(biāo)簽換成p [@str_replace('br', 'p', $Content)]
多對多替換:想把內(nèi)容字段里的br換成br /, 同時p換hr,把/p全清除 [@str_replace(array('br', 'p','/p'), array('br /','hr',''), $Content)]
#include?stdio.h
#define?N?7
int?change(char?a[],char?b,char?c)?{
?int?i?=?0,count?=?0;
?while(a[i]?!=?'\0')?{
?if(a[i]?==?b)?a[i]?=?c;
?count++;
?i++;
?}
?return?count;
}
int?main()?{
char?a[N],b,c;
int?i;
printf("請輸入6個字符:\n");
for(i?=?0;i??N;i++)
scanf("%c",a[i]);
printf("請分別輸入被替換字符和替換字符:\n");
a[i]?=?'\0';?//?補充串結(jié)束符
scanf("%c%c",b,c);
change(a,b,c);
for(i?=?0;i??N;i++)
printf("%c",a[i]);
printf("\n");
return?0;
}
本文標(biāo)題:c語言中批量替換函數(shù) c語言替換快捷鍵
標(biāo)題URL:http://jinyejixie.com/article42/dosjoec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站收錄、軟件開發(fā)、外貿(mào)建站、品牌網(wǎng)站設(shè)計、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)