1、C語(yǔ)言中沒有提供字符串替換函數(shù),網(wǎng)上能找到的類似函數(shù)也只是能替換一個(gè),不能替換全部,工作中卻常常要用到這個(gè)功能,故實(shí)現(xiàn)一個(gè)函數(shù)。該函數(shù)所使用到的相關(guān)函數(shù)均是自己實(shí)現(xiàn),沒有調(diào)用庫(kù)函數(shù)。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、惠山網(wǎng)絡(luò)推廣、成都小程序開發(fā)、惠山網(wǎng)絡(luò)營(yíng)銷、惠山企業(yè)策劃、惠山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供惠山建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
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;
}
C語(yǔ)言數(shù)組和整型數(shù)組清空方法,示例:
1、整數(shù)數(shù)組清零
函數(shù):void bzero(void *s, int n)
頭文件: #include string.h
功能說明:將字符串s的前n個(gè)字符置為0,一般n取sizeof(s),將整塊空間清零;
舉例:char str[10];? ? bzero(str, sizeof(str));? ? ? 也可以將整個(gè)結(jié)構(gòu)體清零;
2、數(shù)組清空
使用時(shí)間:94s
for( k = 0 ; k 10000 ; k++ )
for( i = 0 ; iMAX; i++ )
for( j = 0;j MAX; j++ )
a[i][j] = 0;
擴(kuò)展資料
C語(yǔ)言結(jié)構(gòu)體初始化
1、定義:
struct InitMember
{
int first;
double second;
char* third;
float four;
};
2、定義時(shí)賦值:
struct InitMember test = {-10,3.141590,"method one",0.25};
bzero\x0d\x0a原型:extern void bzero(void *s, int n);用法:#include 功能:置字節(jié)字符串s的前n個(gè)字節(jié)為零且包括‘\0’。說明:bzero無(wú)返回值,并且使用strings.h頭文件,strings.h曾經(jīng)是posix標(biāo)準(zhǔn)的一部分,但是在POSIX.1-2001標(biāo)準(zhǔn)里面,這些函數(shù)被標(biāo)記為了遺留函數(shù)而不推薦使用。在POSIX.1-2008標(biāo)準(zhǔn)里已經(jīng)沒有這些函數(shù)了。推薦使用memset替代bzero。\x0d\x0a \x0d\x0avoid *memset(void *s, int ch, size_t n);函數(shù)解釋:將s中前n個(gè)字節(jié)替換為ch并返回s;memset:作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它是對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法。常見的三種錯(cuò)誤第一: 搞反了ch 和 n的位置.一定要記住 如果要把一個(gè)char a[20]清零, 一定是 memset(a, 0, 20)而不是 memset(a, 20, 0)第二: 過度使用memset, 我想這些程序員可能有某種心理陰影, 他們懼怕未經(jīng)初始化的內(nèi)存, 所以他們會(huì)寫出這樣的代碼:char buffer[20];memset(buffer, 0, sizeof((char)*20));strcpy(buffer, "123");這里的memset是多余的. 因?yàn)檫@塊內(nèi)存馬上就被覆蓋了, 清零沒有意義.第三: 其實(shí)這個(gè)錯(cuò)誤嚴(yán)格來講不能算用錯(cuò)memset, 但是它經(jīng)常在使用memset的場(chǎng)合出現(xiàn)\x0d\x0a \x0d\x0a關(guān)于字符數(shù)組的初始化,在項(xiàng)目的壓力測(cè)試中,發(fā)現(xiàn)性能明顯下降,變懷疑在程序中的若干臨時(shí)字符數(shù)組的初始化(使用bzero)身上。于是修改為首個(gè)字符置零的方式而非全部置零的方式初始化,響應(yīng)得到明顯的提升。原來在mp3檢索的每一條結(jié)果都要進(jìn)行bzero對(duì)臨時(shí)數(shù)組初始化,每一個(gè)請(qǐng)求需要30次的bzero對(duì)臨時(shí)數(shù)組的置零。于是想到了,在非必要的情況下,只對(duì)臨時(shí)數(shù)組的第一個(gè)(或前幾個(gè))字符置零的初始化方式對(duì)比與使用bzero的話,能夠明顯提高性能。