1、C語言中沒有提供字符串替換函數(shù),網上能找到的類似函數(shù)也只是能替換一個,不能替換全部,工作中卻常常要用到這個功能,故實現(xiàn)一個函數(shù)。該函數(shù)所使用到的相關函數(shù)均是自己實現(xiàn),沒有調用庫函數(shù)。
成都創(chuàng)新互聯(lián)公司專注于中山企業(yè)網站建設,響應式網站,電子商務商城網站建設。中山網站建設公司,為中山等地區(qū)提供建站服務。全流程按需開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
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;
}
A函數(shù)的源碼可控嗎?如果可控,把對B函數(shù)的調用改成對新實現(xiàn)的調用就行了。
如果A函數(shù)不是自己寫的(源碼不可控),會麻煩一些。例如,在支持指針的語言上,可以修改B函數(shù)入口部分的匯編代碼,jmp到自己的新實現(xiàn)。要求B函數(shù)和你的實現(xiàn)原型必須完全相同。
char
*replace(char
*source,
char
*sub,
char
*rep)
{
char
*result;
/*pc1
是復制到結果result掃描指針*/
/*pc2
是掃描
source
輔助指針*/
/*pc3
尋找子串時,為檢查變化中source是否和子串相等,是指向sub掃描指針
*/
/*找到匹配后,為了復制到結果串,是指向rep掃描指針*/
char
*pc1,
*pc2,
*pc3;
int
isource,
isub,
irep;
isub
=
strlen(sub);
/*對比串長度*/
irep
=
strlen(rep);
/*替換串長度*/
isource=
strlen(source);
/*源串長度*/
if(NULL==*sub)
return
strdup(source);
/*申請結果串需要空間*/
result
=
(char
*)malloc(((irepisub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));
pc1
=
result;
/*為pc1依次復制結果串每個字節(jié)作準備*/
while(*source
!=
NULL)
{
/*為檢查source和sub是否相等作準備,為pc2,pc3
賦初值*/
pc2
=
source;
pc3
=
sub;
/*
出循環(huán)(任)條件是:
*
*pc2
不等于
*pc3
(和子串不相等)
*
pc2
到源串結尾
*
pc3
到源串結尾
(此時,檢查了全部子串,source處和sub相等)
*****************************************************/
while(*pc2==*pc3
*pc3
!=
NULL
*pc2
!=
NULL)
pc2++,
pc3;
/*
如果找到了子串,進行以下處理工作*/
if(NULL==*pc3)
{
pc3
=
rep;
/*將替代串追加到結果串*/
while(*pc3
!=
NULL)
*pc1
=
*pc3;
pc2--;
source
=
pc2;
/*
檢查
source和sub相等循環(huán)結束后
*
pc2
對應位置是在
sub
中串結束符處該是源串中下個位置
*
將
source
指向其前面?zhèn)€
***************************************************/
}
/*如果沒找到子串,下面復制source所指字節(jié)到結果串*/
*pc1
=
*source;
source;
/*
將source向后移個*/
}
*pc1
=
NULL;
result;
}
#include stdio.h
#define N 80
/* 請在這里填寫答案 */
void f(char *c,char a)
{
for(;*c;c++)
? if(*c='0'*c='9')
? ? ? *c=a;
}
int main(void)
{
char c[N], a;
gets(c);
scanf("%c", a);
f(c, a);
printf("%s", c);
return 0;
}
文章名稱:c語言各函數(shù)的替換 c語言 文本替換
標題鏈接:http://www.rwnh.cn/article34/ddgoise.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供響應式網站、Google、網站排名、網頁設計公司、、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)