char

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè),成都app軟件開(kāi)發(fā)公司以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。成都創(chuàng)新互聯(lián)公司深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
file[20]="copy
C:\a.txt
c:\b.txt";
system(file);
這是最簡(jiǎn)單的辦法。當(dāng)然你也可以寫(xiě)打開(kāi)源文件,再打開(kāi)目標(biāo)文件,讀源文件內(nèi)容,寫(xiě)目標(biāo)文件....
char
*replace(char
*source,
char
*sub,
char
*rep)
{
char
*result;
/*pc1
是復(fù)制到結(jié)果result掃描指針*/
/*pc2
是掃描
source
輔助指針*/
/*pc3
尋找子串時(shí),為檢查變化中source是否和子串相等,是指向sub掃描指針
*/
/*找到匹配后,為了復(fù)制到結(jié)果串,是指向rep掃描指針*/
char
*pc1,
*pc2,
*pc3;
int
isource,
isub,
irep;
isub
=
strlen(sub);
/*對(duì)比串長(zhǎng)度*/
irep
=
strlen(rep);
/*替換串長(zhǎng)度*/
isource=
strlen(source);
/*源串長(zhǎng)度*/
if(NULL==*sub)
return
strdup(source);
/*申請(qǐng)結(jié)果串需要空間*/
result
=
(char
*)malloc(((irepisub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));
pc1
=
result;
/*為pc1依次復(fù)制結(jié)果串每個(gè)字節(jié)作準(zhǔn)備*/
while(*source
!=
NULL)
{
/*為檢查source和sub是否相等作準(zhǔn)備,為pc2,pc3
賦初值*/
pc2
=
source;
pc3
=
sub;
/*
出循環(huán)(任)條件是:
*
*pc2
不等于
*pc3
(和子串不相等)
*
pc2
到源串結(jié)尾
*
pc3
到源串結(jié)尾
(此時(shí),檢查了全部子串,source處和sub相等)
*****************************************************/
while(*pc2==*pc3
*pc3
!=
NULL
*pc2
!=
NULL)
pc2++,
pc3;
/*
如果找到了子串,進(jìn)行以下處理工作*/
if(NULL==*pc3)
{
pc3
=
rep;
/*將替代串追加到結(jié)果串*/
while(*pc3
!=
NULL)
*pc1
=
*pc3;
pc2--;
source
=
pc2;
/*
檢查
source和sub相等循環(huán)結(jié)束后
*
pc2
對(duì)應(yīng)位置是在
sub
中串結(jié)束符處該是源串中下個(gè)位置
*
將
source
指向其前面?zhèn)€
***************************************************/
}
/*如果沒(méi)找到子串,下面復(fù)制source所指字節(jié)到結(jié)果串*/
*pc1
=
*source;
source;
/*
將source向后移個(gè)*/
}
*pc1
=
NULL;
result;
}
A函數(shù)的源碼可控嗎?如果可控,把對(duì)B函數(shù)的調(diào)用改成對(duì)新實(shí)現(xiàn)的調(diào)用就行了。
如果A函數(shù)不是自己寫(xiě)的(源碼不可控),會(huì)麻煩一些。例如,在支持指針的語(yǔ)言上,可以修改B函數(shù)入口部分的匯編代碼,jmp到自己的新實(shí)現(xiàn)。要求B函數(shù)和你的實(shí)現(xiàn)原型必須完全相同。
1、C語(yǔ)言中沒(méi)有提供字符串替換函數(shù),網(wǎng)上能找到的類(lèi)似函數(shù)也只是能替換一個(gè),不能替換全部,工作中卻常常要用到這個(gè)功能,故實(shí)現(xiàn)一個(gè)函數(shù)。該函數(shù)所使用到的相關(guān)函數(shù)均是自己實(shí)現(xiàn),沒(méi)有調(diào)用庫(kù)函數(shù)。
2、函數(shù)代碼如下:
/*descript:replace?str,返回一個(gè)替換以后的字符串,用完之后要free()
success:return?1
error:return?0
BUG:"select?*?from?tab?where?id=':a'?and?name?=':aa'",this?is?not?support,this?function?is?just?simple?str_replace?,not?support?all?SQL?language
*/
char?*replacestr(char?*strbuf,?char?*sstr,?char?*dstr)
{???????char?*p,*p1;
int?len;
if?((strbuf?==?NULL)||(sstr?==?NULL)||(dstr?==?NULL))
return?NULL;
p?=?strstr(strbuf,?sstr);???????//返回字符串第一次出現(xiàn)的地址,否則返回NULL
if?(p?==?NULL)??/*not?found*/
return?NULL;
len?=?strlen(strbuf)?+?strlen(dstr)?-?strlen(sstr);
p1?=?malloc(len);
bzero(p1,?len);
strncpy(p1,?strbuf,?p-strbuf);
strcat(p1,?dstr);
p?+=?strlen(sstr);
strcat(p1,?p);
return?p1;
}
替換函數(shù)主要有strtr(),str_repalce()這兩個(gè)函數(shù)。
首先針對(duì)strtr函數(shù)第一種方式:
我們看看下面的舉例:
?php
echo strtr("I Love you","Lo","lO");
?
得到的結(jié)果是:
I lOve yOu
這個(gè)結(jié)果提醒我們:
1.strtr它是區(qū)分大小寫(xiě)的
2.strtr的替換是很特殊的,你注意看后面那個(gè)yOu,中間的O被替換的,這顯然不是我們的本意。
再舉一個(gè)特殊例子,說(shuō)明這個(gè)php的sttr函數(shù)的怪異
?php
echo strtr("I Love you","Love","");
?
結(jié)果是:
I Love you
什么也不會(huì)改變,所以strtr需要注意的是:
3.不能被替換為空,也就是末位那個(gè)參數(shù)不能是空字符串,當(dāng)然空格是可以的。
再次舉例strtr函數(shù)的另一種情況:
?php
echo strtr("I Loves you","Love","lOvEA");
?
結(jié)果是:
I lOvEs yOu
注意看第三個(gè)參數(shù)的A,在結(jié)果中并沒(méi)有出現(xiàn)。
4.我不建議用strtr以少換多。
ok,既然這個(gè)strtr函數(shù)挺麻煩為什么還要用呢?
原因是,它的速度很快。據(jù)說(shuō),strtr 比 str_replace 快四倍。
5.能用strtr函數(shù)的時(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
再次提醒那個(gè)Love 寫(xiě)成love 是行不通的哦。
字符串取代。
語(yǔ)法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函數(shù)種類(lèi): 資料處理
內(nèi)容說(shuō)明
本函數(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)容的變量名)]
實(shí)例:
多對(duì)一替換:想把內(nèi)容字段里所有的p/p標(biāo)簽清除掉,替換成空 [@str_replace(array('p','/p'), '', $Content)]
一對(duì)一替換:想把內(nèi)容字段里所有的br標(biāo)簽換成p [@str_replace('br', 'p', $Content)]
多對(duì)多替換:想把內(nèi)容字段里的br換成br /, 同時(shí)p換hr,把/p全清除 [@str_replace(array('br', 'p','/p'), array('br /','hr',''), $Content)]
本文標(biāo)題:c語(yǔ)言中的函數(shù)的替換,c語(yǔ)言如何替換
當(dāng)前地址:http://chinadenli.net/article21/dsiejcd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、Google、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)