程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 實現字符串中子字符串的替換2——待替換字符串和替換字符串的長度可以不相等,字符串中子

實現字符串中子字符串的替換2——待替換字符串和替換字符串的長度可以不相等,字符串中子

編輯:關於C語言

實現字符串中子字符串的替換2——待替換字符串和替換字符串的長度可以不相等,字符串中子


 

//使用C語言實現字符串中子字符串的替換
//描述:編寫一個字符串替換函數,如函數名為 StrReplace(char* strSrc, char* strFind, char* strReplace),
//strSrc為原字符串,strFind是待替換的字符串,strReplace為替換字符串。
//舉個直觀的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”這個字符串,把其中的“RST”替換為“ggg”這個字符串,
//結果就變成了:ABCDEFGHIJKLMNOPQgggUVWXYZ

#include<stdio.h>
#include<string.h>

void StrReplace(char* strSrc, char* strFind, char* strReplace)
{
    int i,j,k,m;
    int lengthSrc,lengthFind,lengthReplace;
    lengthSrc = strlen(strSrc);
    lengthFind = strlen(strFind);
    lengthReplace = strlen(strReplace);

    for(i=0;i<lengthSrc;)
    {
        j = 0;
        if(strSrc[i] == strFind[j])//遍歷原字符串,如果當前字符與strFind[0]相等,開始逐位判斷
        {
            do
            {
                i++;j++;
            }while((j < lengthFind) && (strSrc[i] == strFind[j]));

            //判斷跳出while循環的條件。如果j == lengthFind表示找到了匹配的字符串。且i指向strSrc中匹配字符串strFind的下一個字符。
            if(j == lengthFind)
            {
                //strFind字符串和strReplace字符串的長度相等時
                if(lengthFind == lengthReplace)
                {
                    for(k=i-lengthFind,m=0;m<lengthReplace;k++,m++)
                    {
                        strSrc[k] = strReplace[m];
                    }
                }

                //strFind字符串的長度小於strReplace字符串的長度
                if(lengthFind < lengthReplace)
                {
                    //增加空位。
                    for(k=lengthSrc;k>=i;k--)
                    {
                        strSrc[k+lengthReplace-lengthFind] = strSrc[k];
                    }

                    //strSrc長度更新。如果不更新,在下一次增加空位時,會有問題。
                    lengthSrc += lengthReplace-lengthFind;

                    //開始替換。
                    for(k=i-lengthFind,m=0;m<lengthReplace;k++,m++)
                    {
                        strSrc[k] = strReplace[m];
                    }

                    //strSrc的元素和長度變更後,需要將i重新指向已替換部分的下一個字符。
                    i+= lengthFind-lengthReplace;
                }
                
                //strFind字符串的長度大於strReplace字符串的長度
                if(lengthFind > lengthReplace)
                {
                    //減小空位。
                    for(k=i;k<=lengthSrc;k++)
                    {
                        strSrc[k-(lengthFind-lengthReplace)] = strSrc[k];
                    }

                    //strSrc長度更新。如果不更新,在下一次減小空位時,會有問題。
                    lengthSrc -= lengthFind-lengthReplace;

                    //開始替換。
                    for(k=i-lengthFind,m=0;m<lengthReplace;k++,m++)
                    {
                        strSrc[k] = strReplace[m];
                    }

                    //strSrc的元素和長度變更後,需要將i重新指向已替換部分的下一個字符。
                    i-= lengthFind-lengthReplace;
                }
            }
        }
        else
        {
            i++;
        }
    }
}

int main()
{
    char strSrc[255],strFind[255],strReplace[255];
    gets(strSrc);
    gets(strFind);
    gets(strReplace);
    
    StrReplace(strSrc,strFind,strReplace);
    puts(strSrc);
    return 0;
}

word 或 記事本 可以同時替換2個不同的字符串? 即要分2次替換的,想一次完成

不同的字符串要兩者之間帶有點關聯,不然只能分兩次替換
比如“我的、他的”替換為“她的”這樣可以一次完成
按CTRL+H打開替換對話框,單擊高級,勾選“使用通配符”
在“查找內容”框中輸入?的
在“替換為”框中輸入她的
單擊“全部替換”
 

將字符串s1中第m個字符開始的n個字符替換為字符串s2,s2的長度不一定等於n,因此替換後的字符長度可可以改變

#include<stdio.h>
char* exchange(char* first,char* second,int index,int count) //這兒用的方法很好想,沒什麼難度
//傳入的參數1是要被插入的字符串引用,2是要插入的字符串,3是開始位置,包括index
//位,count是替換的字符數
{
char *temp = new char[100];//必須用new或者malloc(好像是這麼寫的)動態分配空間,
//否則函數結束,定義的數組就沒了
for(int i = 0;i<=index && first[i]!='\0';i++)//三個for循環完成需求,比較笨的方法
{
temp[i] = first[i];
}
int j = 0;
for(;second[j]!='\0';j++)
{
temp[index+j] = second[j];
}
for(int m = 0;first[m]!='\0';m++)
{
temp[index+j+m] = first[index+count+m];
}
return temp;//相當於返回數組temp的指針
}
void main()
{
char *a = "afdadfgg";//如果用{'','',''}形式賦值的話,必須將最後一個字符賦值為'\0'
char *b = "lkl";
a = exchange(a,b,2,2);
printf("插入後的字符為%s\n",a);
}
//其實以後你學了C++就會發現其實要實現這樣的操作很簡單的,不過平時多做些這樣的編程也
//很有好處的
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved