C語言實(shí)現(xiàn)字符串替換的示例代碼
替換,意思就是用另一個(gè)字符串str3來替換str1中所有的str2。替換過程和查找的過程可以合并在一起,在上面循環(huán)查找的過程中,每找到一個(gè)str2,就把它替換為str3,替換后移動(dòng)指針p。替換的情況分好幾種:一種是str2和str3的長度相同,一種是str3比str2長,一種是str3比str2短。第一種情況比較簡單,直接使用strncpy函數(shù)就可以,后面兩種情況,都需要把str1中的元素進(jìn)行移動(dòng)。比如,在上面的例子中,str2=“the”,假設(shè)str3 =“this”,str3比str2長,為了有足夠的空間,每找到一個(gè)the,從the后面的字符開始到結(jié)尾的‘\0’都要往后移動(dòng)1個(gè)字節(jié),也就是給this騰出4個(gè)字節(jié)的地方來(the的3個(gè)字節(jié)加移出來的1個(gè)字節(jié))。假設(shè)str3 =“ok”,str3比str2短,為了填補(bǔ)空缺,每找到一個(gè)the,從the后面的字符開始到結(jié)尾的‘\0’都要往前移動(dòng)1個(gè)字節(jié),也就是給ok留出兩個(gè)字節(jié)的地方就夠了。移動(dòng)過后,使用strncpy函數(shù)把str3拷貝到str2所在的地方。下面的程序中,str_replace就是用來實(shí)現(xiàn)替換功能的。
關(guān)鍵點(diǎn):
注意字符數(shù)組與字符串的區(qū)別;在字符數(shù)組最后一個(gè)字符后面加上’\0’就構(gòu)成了一個(gè)字符串。
/*-------------------------------------------------
功能:實(shí)現(xiàn)字符串的替換
描述:第一行輸入原字符串,第二行輸入要替換字符串,
第三行輸入新的字符串
輸入示例:
There is an orange, do you want to eat it?
orange
apple
輸出示例:
There is an apple, do you want to eat it?
Author: Zhang Kaizhou
Date: 2019-8-9 11:11:32
--------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 300
void str_replace(char * str1, char * str2, char * str3);
int main(){
? ? char str1[MAXSIZE];
? ? char str2[MAXSIZE];
? ? char str3[MAXSIZE];
? ? gets(str1);
? ? gets(str2);
? ? gets(str3);
? ? str_replace(str1, str2, str3);
? ? puts(str1);
? ? return 0;
}
void str_replace(char * str1, char * str2, char * str3){
? ? int i, j, k, done, count = 0, gap = 0;
? ? char temp[MAXSIZE];
? ? for(i = 0; i < strlen(str1); i += gap){
? ? ? ? if(str1[i] == str2[0]){
? ? ? ? ? ? done = 0;
? ? ? ? ? ? for(j = i, k = 0; k < strlen(str2); j++, k++){
? ? ? ? ? ? ? ? if(str1[j] != str2[k]){
? ? ? ? ? ? ? ? ? ? done = 1;
? ? ? ? ? ? ? ? ? ? gap = k;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if(done == 0){ // 已找到待替換字符串并替換
? ? ? ? ? ? ? ? for(j = i + strlen(str2), k = 0; j < strlen(str1); j++, k++){ // 保存原字符串中剩余的字符
? ? ? ? ? ? ? ? ? ? temp[k] = str1[j];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? temp[k] = '\0'; // 將字符數(shù)組變成字符串
? ? ? ? ? ? ? ? for(j = i, k = 0; k < strlen(str3); j++, k++){ // 字符串替換
? ? ? ? ? ? ? ? ? ? str1[j] = str3[k];
? ? ? ? ? ? ? ? ? ? count++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? for(k = 0; k < strlen(temp); j++, k++){ // 剩余字符串回接
? ? ? ? ? ? ? ? ? ? str1[j] = temp[k];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? str1[j] = '\0'; // 將字符數(shù)組變成字符串
? ? ? ? ? ? ? ? gap = strlen(str2);
? ? ? ? ? ? }
? ? ? ? }else{
? ? ? ? ? ? gap = 1;
? ? ? ? }
? ? }
? ? if(count == 0){
? ? ? ? printf("Can't find the replaced string!\n");
? ? }
? ? return;
}到此這篇關(guān)于C語言實(shí)現(xiàn)字符串替換的示例代碼的文章就介紹到這了,更多相關(guān)C語言 字符串替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++各種數(shù)據(jù)類型所占內(nèi)存大小詳解
這篇文章主要介紹了C++各種數(shù)據(jù)類型所占內(nèi)存大小,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
matlab遺傳算法求解車間調(diào)度問題分析及實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了matlab遺傳算法求解車間調(diào)度問題解析,文中附含詳細(xì)實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
C語言實(shí)現(xiàn)電影院選座管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電影院選座管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例
深度優(yōu)先搜索即是對一個(gè)新發(fā)現(xiàn)的節(jié)點(diǎn)上如果還關(guān)聯(lián)未探測到的邊,就沿此邊探測下去,直到發(fā)現(xiàn)從原點(diǎn)可達(dá)的所有點(diǎn)為止,這里我們就來展示C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例2016-06-06
C++實(shí)現(xiàn)LeetCode(228.總結(jié)區(qū)間)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(228.總結(jié)區(qū)間),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
淺談Qt實(shí)現(xiàn)HTTP的Get/Post請求
本文主要介紹了淺談Qt實(shí)現(xiàn)HTTP的Get/Post請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

