#include?"stdafx.h"
專業從事成都網站設計、成都網站建設,高端網站制作設計,微信小程序開發,網站推廣的成都做網站的公司。優秀技術團隊竭力真誠服務,采用H5高端網站建設+CSS3前端渲染技術,成都響應式網站建設,讓網站在手機、平板、PC、微信下都能呈現。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
#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;
}
替換函數主要有strtr(),str_repalce()這兩個函數。
首先針對strtr函數第一種方式:
我們看看下面的舉例:
?php
echo strtr("I Love you","Lo","lO");
?
得到的結果是:
I lOve yOu
這個結果提醒我們:
1.strtr它是區分大小寫的
2.strtr的替換是很特殊的,你注意看后面那個yOu,中間的O被替換的,這顯然不是我們的本意。
再舉一個特殊例子,說明這個php的sttr函數的怪異
?php
echo strtr("I Love you","Love","");
?
結果是:
I Love you
什么也不會改變,所以strtr需要注意的是:
3.不能被替換為空,也就是末位那個參數不能是空字符串,當然空格是可以的。
再次舉例strtr函數的另一種情況:
?php
echo strtr("I Loves you","Love","lOvEA");
?
結果是:
I lOvEs yOu
注意看第三個參數的A,在結果中并沒有出現。
4.我不建議用strtr以少換多。
ok,既然這個strtr函數挺麻煩為什么還要用呢?
原因是,它的速度很快。據說,strtr 比 str_replace 快四倍。
5.能用strtr函數的時候一定要用。
第二種情況:
strtr(string,array)
6.strtr符合意愿的使用方法
?php
$table_change = array('you'='her sister');
echo strtr("I Love you",$table_change);
?
結果為:
I Love her sister
7.小技巧:你想到替換什么你就往數組加什么
比如:
?php
$table_change = array('you'='her sister');
$table_change += array('Love' = 'hate');
echo strtr("I Love you",$table_change);
?
結果是:
I hate her sister
再次提醒那個Love 寫成love 是行不通的哦。
字符串取代。
語法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函數種類: 資料處理
內容說明
本函數將字符串 str 代入 haystack 字符串中,將所有的 needle 置換成 str。
下例將 %body% 以 black 取代
?php
$bodytag = str_replace("%body%", "black", "body text=%body%");
echo $bodytag;
?
格式:
[@str_replace("要替換的舊內容", "要取代原內容的新字符", $被替換內容的變量名)]
[@str_replace(array('舊1','舊2','舊3'), array('新1','新2','新3'), $被替換內容的變量名)]
[@str_replace(array('舊1','舊2','舊3'), '新內容', $被替換內容的變量名)]
實例:
多對一替換:想把內容字段里所有的p/p標簽清除掉,替換成空 [@str_replace(array('p','/p'), '', $Content)]
一對一替換:想把內容字段里所有的br標簽換成p [@str_replace('br', 'p', $Content)]
多對多替換:想把內容字段里的br換成br /, 同時p換hr,把/p全清除 [@str_replace(array('br', 'p','/p'), array('br /','hr',''), $Content)]
#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;
}
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依次復制結果串每個字節作準備*/
while(*source
!=
NULL)
{
/*為檢查source和sub是否相等作準備,為pc2,pc3
賦初值*/
pc2
=
source;
pc3
=
sub;
/*
出循環(任)條件是:
*
*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相等循環結束后
*
pc2
對應位置是在
sub
中串結束符處該是源串中下個位置
*
將
source
指向其前面個
***************************************************/
}
/*如果沒找到子串,下面復制source所指字節到結果串*/
*pc1
=
*source;
source;
/*
將source向后移個*/
}
*pc1
=
NULL;
result;
}
#includestdio.h
#includeconio.h
#includestring.h
#includestdlib.h
void?Substitute(char?*pInput,?char?*pOutput,?char?*pSrc,?char?*pDst)
{
char????*pi,?*po,?*p;
int?????nSrcLen,?nDstLen,?nLen;
//?指向輸入字符串的游動指針.
pi?=?pInput;
//?指向輸出字符串的游動指針.
po?=?pOutput;
//?計算被替換串和替換串的長度.
nSrcLen?=?strlen(pSrc);
nDstLen?=?strlen(pDst);
//?查找pi指向字符串中第一次出現替換串的位置,并返回指針(找不到則返回null).
p?=?strstr(pi,?pSrc);
if(p)
{
//?找到.
while(p)
{
//計算被替換串前邊字符串的長度.
nLen?=?(int)(p?-?pi);
//?復制到輸出字符串.
memcpy(po,?pi,?nLen);
memcpy(po?+?nLen,?pDst,?nDstLen);
//?跳過被替換串.
pi?=?p?+?nSrcLen;
//?調整指向輸出串的指針位置.
po?=?po?+?nLen?+?nDstLen;
//?繼續查找.
p?=?strstr(pi,?pSrc);
}
//?復制剩余字符串.
strcpy(po,?pi);
}
else
{
//?沒有找到則原樣復制.
strcpy(po,?pi);
}
}
int?main(int?ac,?char?*av[])
{
if?(ac!=5)?{
printf("程序名?要操作的文件?新文件?查找的字符串?替換的字符串\n");
printf("示例:test.exe?1.txt?2.txt?hello?love\n");
return?0;
}
const?int?MAXSIZES?=?100;
FILE?*fpSrc,*fpDes;
char?filename1[20]="1.txt";
char?filename2[20]="2.txt";
//要求查找的字符串,替換的字符串;
char?ps[]="hello";
char?pd[]="love";
//求取所查找和替換的字符串的長度;
int?len_src=strlen(av[3]);
int?len_des=strlen(av[4]);
//定義存儲字符串緩沖區;很奇怪的一點是,fgets函數不能將字符串寫入動態分配的內存中
/*char*?Src_buf=(char*)(sizeof(char)*MAXSIZES);
char*?Cpy_buf=(char*)(sizeof(char)*MAXSIZES);
char*?Des_buf=(char*)(sizeof(char)*MAXSIZES);*/
char?Src_buf[MAXSIZES]?=?{0};
char?Cpy_buf[MAXSIZES]?=?{0};
char?Des_buf[MAXSIZES]?=?{0};
//打開文件
if((fpSrc=fopen(av[1],"r+"))==NULL)
{
printf("fail?to?open?the?file1?!\n");
exit(1);
}
if((fpDes=fopen(av[2],"a+"))==NULL)
{
printf("fail?to?open?the?file2?!\n");
exit(1);
}
//進行循環讀取
while(!feof(fpSrc))//判斷文件是否已結束;!feof(fpSrc)
{
fgets(Src_buf,MAXSIZES,fpSrc);
Substitute(Src_buf,Des_buf,av[3],av[4]);
fputs(Des_buf,fpDes);
printf("%s",Des_buf);
}
fclose(fpSrc);
fclose(fpDes);
system("pause");
return?0;
}
分享題目:c語言用函數替換字符 C語言替換字符
URL標題:http://m.newbst.com/article20/hjjhjo.html
成都網站建設公司_創新互聯,為您提供App設計、企業網站制作、關鍵詞優化、網站內鏈、網站營銷、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯