c語言函數(shù)的怎樣替換 c語言替換語句

c語言運用函數(shù)替換字符串中的數(shù)字求助大佬

#include stdio.h

為朔城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及朔城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、朔城網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

#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ù)

1、C語言中沒有提供字符串替換函數(shù),網(wǎng)上能找到的類似函數(shù)也只是能替換一個,不能替換全部,工作中卻常常要用到這個功能,故實現(xiàn)一個函數(shù)。該函數(shù)所使用到的相關(guān)函數(shù)均是自己實現(xiàn),沒有調(diào)用庫函數(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;

}

C語言關(guān)于函數(shù)的替換

A函數(shù)的源碼可控嗎?如果可控,把對B函數(shù)的調(diào)用改成對新實現(xiàn)的調(diào)用就行了。

如果A函數(shù)不是自己寫的(源碼不可控),會麻煩一些。例如,在支持指針的語言上,可以修改B函數(shù)入口部分的匯編代碼,jmp到自己的新實現(xiàn)。要求B函數(shù)和你的實現(xiàn)原型必須完全相同。

C語言指針函數(shù)替換字符

char

*replace(char

*source,

char

*sub,

char

*rep)

{

char

*result;

/*pc1

是復(fù)制到結(jié)果result掃描指針*/

/*pc2

是掃描

source

輔助指針*/

/*pc3

尋找子串時,為檢查變化中source是否和子串相等,是指向sub掃描指針

*/

/*找到匹配后,為了復(fù)制到結(jié)果串,是指向rep掃描指針*/

char

*pc1,

*pc2,

*pc3;

int

isource,

isub,

irep;

isub

=

strlen(sub);

/*對比串長度*/

irep

=

strlen(rep);

/*替換串長度*/

isource=

strlen(source);

/*源串長度*/

if(NULL==*sub)

return

strdup(source);

/*申請結(jié)果串需要空間*/

result

=

(char

*)malloc(((irepisub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));

pc1

=

result;

/*為pc1依次復(fù)制結(jié)果串每個字節(jié)作準備*/

while(*source

!=

NULL)

{

/*為檢查source和sub是否相等作準備,為pc2,pc3

賦初值*/

pc2

=

source;

pc3

=

sub;

/*

出循環(huán)(任)條件是:

*

*pc2

不等于

*pc3

(和子串不相等)

*

pc2

到源串結(jié)尾

*

pc3

到源串結(jié)尾

(此時,檢查了全部子串,source處和sub相等)

*****************************************************/

while(*pc2==*pc3

*pc3

!=

NULL

*pc2

!=

NULL)

pc2++,

pc3;

/*

如果找到了子串,進行以下處理工作*/

if(NULL==*pc3)

{

pc3

=

rep;

/*將替代串追加到結(jié)果串*/

while(*pc3

!=

NULL)

*pc1

=

*pc3;

pc2--;

source

=

pc2;

/*

檢查

source和sub相等循環(huán)結(jié)束后

*

pc2

對應(yīng)位置是在

sub

中串結(jié)束符處該是源串中下個位置

*

source

指向其前面?zhèn)€

***************************************************/

}

/*如果沒找到子串,下面復(fù)制source所指字節(jié)到結(jié)果串*/

*pc1

=

*source;

source;

/*

將source向后移個*/

}

*pc1

=

NULL;

result;

}

c語言中完成一個自定義函數(shù),替換指定字符串中的對應(yīng)字符的代碼

#include?"stdafx.h"

#include?stdio.h

#include?string.h

void?replaceChar(char?*string,?char?oldChar,?char?newChar){

int?len?=?strlen(string);

int?i;

for?(i?=?0;?i??len;?i++){

if?(string[i]?==?oldChar){

string[i]?=?newChar;

}

}

}

int?main(){

char?str[]?=?"test";

char?oldChar?=?'t';

char?newChar?=?'w';?

replaceChar(str,?oldChar,?newChar);

printf("%s\n",?str);

return?0;

}

C語言中,宏替換的替換規(guī)則

簡單來說:宏定義又稱為宏代換、宏替換,簡稱“宏”。宏替換是C/C++的預(yù)處理中的一部分,在C++標準中有4條規(guī)則來定義替換。

規(guī)則1:實參替換。

本條規(guī)則描述帶參數(shù)的宏的替換過程。

對于宏定義中的形參,在替換列表中,如果不是作為#或##的操作數(shù),那么將對應(yīng)實參完全

展開(相當于對實參進行求值),然后將替換列表中的形參替換掉.如果是#或##的操作數(shù),

那么不進行替換。

規(guī)則2:多次掃描。

在所有的形參替換為實參后,對結(jié)果進行再次掃描,如果發(fā)現(xiàn)還有可替換的宏,則進行替換,

否則中止。

規(guī)則3:遞歸替換抑制。

如果在替換列表中發(fā)現(xiàn)當前正在展開的宏的名字,那么這里不進行替換.更進一步,在嵌套

的替換過程中發(fā)現(xiàn)已經(jīng)替換過的宏的名字,則不進行替換。

規(guī)則4:遞歸預(yù)處理抑制。

如果替換后的結(jié)果形成預(yù)處理指令,則不執(zhí)行這條預(yù)處理指令。

看幾個C++標準中的例子:

#define x 3

#define f(a) f(x * (a))

#undef x

#define x 2

#define g f

#define z z[0]

#define h g(~

#define m(a) a(w)

#define w 0,1

#define t(a) a

f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);

g(x+(3,4)-w) | h 5) m(f)^m(m);

其結(jié)果分別是

f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1);

f(2 * (2+(3,4)-0,1)) | f(2 * ( ~ 5)) f(2 * (0,1))^m(0,1);

對于第一個,主要在于t(t(g)(0) + t)(1)的展開。

容易計算出最外層的t的實參是f(2 * (0)) + t,而作為t的參數(shù)傳入時其中的t是

正在被展開的宏,所以根據(jù)規(guī)則3,不對這個t進行處理,保持不變,得到f(2 * (0)) + t(1)。

對于第二個,h 5)被替換為g(~5),應(yīng)用規(guī)則2,被替換為f(2 * ( ~ 5))。

而m(m)首先被替換為m(w),然后應(yīng)用規(guī)則2再次進行替換,但是m已經(jīng)是替換過的了,所以保持

不變,只對w進行替換。

#define str(s) # s

#define xstr(s) str(s)

#define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \

x ## s, x ## t)

#define INCFILE(n) vers ## n /* from previous #include example */

#define glue(a, b) a ## b

#define xglue(a, b) glue(a, b)

#define HIGHLOW "hello"

#define LOW LOW ", world"

debug(1, 2);

fputs(str(strncmp("abc\0d", "abc", ’\4’) /* this goes away */

== 0) str(: @\n), s);

#include xstr(INCFILE(2).h)

glue(HIGH, LOW);

xglue(HIGH, LOW)

其結(jié)果分別是

printf("x" "1" "= %d, x" "2" "= %s", x1, x2);

fputs("strncmp(\"abc\\0d\", \"abc\", ’\\4’) = = 0" ": @\n", s);

#include "vers2.h"

"hello";

"hello" ", world"

關(guān)鍵是glue和xglue.

對于glue(HIGH, LOW),首先有一個規(guī)則1的抑制,得到HIGHLOW;的結(jié)果,然后二次掃描,得到

"hello";

對于xglue(HIGH, LOW)沒有抑制效果,所以對參數(shù)求值,分別得到HIGH和LOW ", world",即

glue(HIGH, LOW ", world")。

然后進行連接操作得到HIGHLOW ", world",最后再掃描一次得到"hello" ", world"

如果考慮字符串的自然的連接,就可以得到"hello, world"了。

擴展資料

宏語言是一類編程語言,其全部或多數(shù)計算是由擴展宏完成的。宏語言并未在通用編程中廣泛使用,但在文本處理程序中應(yīng)用普遍。例如, C preprocessor C預(yù)處理器Internet Macros(iOpus) M4(如前所述,源于ATT,捆綁于Unix)

宏定義

c程序提供的預(yù)處理功能之一。包括帶參數(shù)的宏定義和不帶參數(shù)的宏定義。具體是指用一個指定的標志符來進行簡單的字符串替換或者進行闡述替換。形式為:

#define標志符[(參數(shù)表)] 字符串

宏名

在上定義中的標志符被稱為“宏名”。

宏展開

在c程序編譯時將宏名替換成字符串的過程稱為“宏展開”。

宏語言是一類編程語言,其全部或多數(shù)計算是由擴展宏完成的。宏語言并未在通用編程中廣泛使用, 但在文本處理程序中應(yīng)用普遍。例如,

C preprocessorC 預(yù)處理器

Internet Macros(iOpus)

M4(如前所述,源于ATT,捆綁于Unix)

參考資料來源:百度百科-宏

文章標題:c語言函數(shù)的怎樣替換 c語言替換語句
鏈接URL:http://muchs.cn/article34/dosddpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、動態(tài)網(wǎng)站、建站公司自適應(yīng)網(wǎng)站、做網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(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)

成都定制網(wǎng)站網(wǎng)頁設(shè)計