[C/C++ 演算法]-純C 字串搜尋(尋找)與取代(替換)
本篇要分享-純C 字串尋找與替換範例,有興趣的(C/P)同好,歡迎來(C/P)一下哈哈 ^ ^。
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ char* pchrsource = "My English Name Jash.liao"; char pchrresult[1000];//char* pchrresult; char* pchrfind="Name"; char* pchrrep="Name is"; char* pchrformer; char* pchrlocation; int intrep;// 替換文字的長度 int intfind;// 搜尋文字的長度 int intlength;// 結果文字的長度 int intgap=0;// 偏移量 intfind=strlen(pchrfind);// 搜尋文字的長度 intrep=strlen(pchrrep);// 替換文字的長度 intlength=strlen(pchrsource)+1;// 結果文字的長度 //pchrresult = (char*)malloc(sizeof(char) * intlength);// 配置記憶體 strcpy(pchrresult, pchrsource);//複製文字 pchrformer=pchrsource; pchrlocation= strstr(pchrformer, pchrfind);//搜尋文字出現的起始位址指標 while(pchrlocation!=NULL){ intgap+=(pchrlocation - pchrformer);//定位偏移量 pchrresult[intgap]='\0';// 將結束符號定在搜尋到的位址上 intlength+=(intrep-intfind);//計算新的長度 //pchrresult = (char*)realloc(pchrresult, intlength * sizeof(char));// 變更記憶體空間 strcat(pchrresult, pchrrep);//串接在結果後面 intgap+=intrep;//更新偏移量 pchrformer=pchrlocation+intfind;//更新尚未被取代的字串的位址 strcat(pchrresult, pchrformer);//將尚未被取代的文字串接在結果後面 pchrlocation= strstr(pchrformer, pchrfind);//搜尋文字出現的起始位址指標 } pchrresult[strlen(pchrresult)]='\0'; printf( "source: '%s'\n", pchrsource ); printf( "result: '%s'\n", pchrresult); //free(pchrresult); return 0; }
|
ps:本篇文章有兩種寫法(一種是先預設輸出字串長度,另一種是動態配置記憶體,如果是PC建議動態配置記憶體,但如果是Embedded則建議第一種方法)
#include <stdio.h>
回覆刪除#include <string.h>
#include <stdlib.h>
int replce_str(char* pchrsource,char* pchrfind,char* pchrrep)
{
char pchrresult[1000];//
char* pchrformer;
char* pchrlocation;
int intrep;// 替換文字的長度
int intfind;// 搜尋文字的長度
int intlength;// 結果文字的長度
int intgap=0;// 偏移量
intfind=strlen(pchrfind);// 搜尋文字的長度
intrep=strlen(pchrrep);// 替換文字的長度
intlength=strlen(pchrsource)+1;// 結果文字的長度
//pchrresult = (char*)malloc(sizeof(char) * intlength);// 配置記憶體
strcpy(pchrresult, pchrsource);//複製文字
pchrformer=pchrsource;
pchrlocation= strstr(pchrformer, pchrfind);//搜尋文字出現的起始位址指標
while(pchrlocation!=NULL){
intgap+=(pchrlocation - pchrformer);//定位偏移量
pchrresult[intgap]='\0';// 將結束符號定在搜尋到的位址上
intlength+=(intrep-intfind);//計算新的長度
//pchrresult = (char*)realloc(pchrresult, intlength * sizeof(char));// 變更記憶體空間
strcat(pchrresult, pchrrep);//串接在結果後面
intgap+=intrep;//更新偏移量
pchrformer=pchrlocation+intfind;//更新尚未被取代的字串的位址
strcat(pchrresult, pchrformer);//將尚未被取代的文字串接在結果後面
pchrlocation= strstr(pchrformer, pchrfind);//搜尋文字出現的起始位址指標
}
pchrresult[strlen(pchrresult)]='\0';
strcpy(pchrsource,pchrresult);
//free(pchrresult);
return 0;
}
int main(){
char pchrsource[5000];
char* pchrfind="Name";
char* pchrrep="Name is";
strcpy(pchrsource, "My English Name Jash.liao");
printf( "source: '%s'\n", pchrsource );
replce_str(pchrsource,pchrfind,pchrrep);
printf( "source: '%s'\n", pchrsource );
return 0;
}