1、C語言中沒有提供字符串替換函數(shù),網(wǎng)上能找到的類似函數(shù)也只是能替換一個,不能替換全部,工作中卻常常要用到這個功能,故實(shí)現(xiàn)一個函數(shù)。該函數(shù)所使用到的相關(guān)函數(shù)均是自己實(shí)現(xiàn),沒有調(diào)用庫函數(shù)。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比瑤海網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式瑤海網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋瑤海地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
2、函數(shù)代碼如下:
/*descript:replace?str,返回一個替換以后的字符串,用完之后要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()這兩個函數(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)容的變量名)]
實(shí)例:
多對一替換:想把內(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)]
C語言實(shí)現(xiàn)字符串替換函數(shù):
#include stdio.h
#include stdlib.h
#include ctype.h
#include string.h
//字符串替換函數(shù)
/********************************************************************
* Function: my_strstr()
* Description: 在一個字符串中查找一個子串;
* Input: ps: 源; pd:子串
* Return : 0:源字符串中沒有子串; 1:源字符串中有子串;
*********************************************************************/
char * my_strstr(char * ps,char *pd)
{
char *pt = pd;
int c = 0;
while(*ps != '\0')
{
if(*ps == *pd)
{
while(*ps == *pd *pd!='\0')
{
ps++;
pd++;
c++;
}
}else
{
ps++;
}
if(*pd == '\0')
{
return (ps - c);
}
c = 0;
pd = pt;
}
return 0;
}
/********************************************************************
* Function: memcpy()
* Description: 復(fù)制一個內(nèi)存區(qū)域到另一個區(qū)域;
* Input: src: 源;
count: 復(fù)制字節(jié)數(shù).
* Output: dest: 復(fù)制目的地;
* Return : dest;
*********************************************************************/
void * memcpy(void * dest,const void *src,size_t count)
{
char *tmp = (char *) dest, *s = (char *) src;
while (count--)
*tmp++ = *s++;
return dest;
}
/********************************************************************
* Function: str_replace()
* Description: 在一個字符串中查找一個子串,并且把所有符合的子串用
另一個替換字符串替換。
* Input: p_source:要查找的母字符串; p_seach要查找的子字符串;
p_repstr:替換的字符串;
* Output: p_result:存放結(jié)果;
* Return : 返回替換成功的子串?dāng)?shù)量;
* Others: p_result要足夠大的空間存放結(jié)果,所以輸入?yún)?shù)都要以\0結(jié)束;
*********************************************************************/
int str_replace(char *p_result,char* p_source,char* p_seach,char *p_repstr)
{
int c = 0;
int repstr_leng = 0;
int searchstr_leng = 0;
char *p1;
char *presult = p_result;
char *psource = p_source;
char *prep = p_repstr;
char *pseach = p_seach;
int nLen = 0;
repstr_leng = strlen(prep);
searchstr_leng = strlen(pseach);
do{
p1 = my_strstr(psource,p_seach);
if (p1 == 0)
{
strcpy(presult,psource);
return c;
}
c++; //匹配子串計(jì)數(shù)加1;
printf("結(jié)果:%s\r\n",p_result);
printf("源字符:%s\r\n",p_source);
// 拷貝上一個替換點(diǎn)和下一個替換點(diǎn)中間的字符串
nLen = p1 - psource;
memcpy(presult, psource, nLen);
// 拷貝需要替換的字符串
memcpy(presult + nLen,p_repstr,repstr_leng);
psource = p1 + searchstr_leng;
presult = presult + nLen + repstr_leng;
}while(p1);
return c;
}
#define MAX 200
int main(void)
{
int i = 0;
char s[MAX] ={0}; //存放源字串
char s1[MAX]={0}; //存放子字串
char s2[MAX]={0}; //存放替換字串
char result_a[2000] = {0};//存放替換結(jié)果;
char *p,*ptm,*pr;
puts("Please input the string for s:");
scanf("%s",s);
puts("Please input the string for s1:");
scanf("%s",s1);
puts("Please input the string for s2:");
scanf("%s",s2);
ptm = s;
pr = result_a;
i = str_replace(pr,ptm,s1,s2);
printf("替換%d個子字符串;\r\n",i);
printf("替換后結(jié)果:%s\r\n",result_a);
system("pause");
}
當(dāng)前文章:字符替換函數(shù)c語言 c字符串替換函數(shù)
標(biāo)題鏈接:http://jinyejixie.com/article40/ddisseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、云服務(wù)器、響應(yīng)式網(wǎng)站、Google、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)