程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-編寫一個函數,void fun(char *str, char *substr1, char *subtr2 , …)

c語言-編寫一個函數,void fun(char *str, char *substr1, char *subtr2 , …)

編輯:編程綜合問答
編寫一個函數,void fun(char *str, char *substr1, char *subtr2 , …)

編寫一個函數,void fun(char *str, char *substr1, char *subtr2 , …)實現將字符串str中的子串substr1替換為子串substr2,並同時統計替換後str字符串長度,要求:接口定義中已有部分不許修改,但允許在…處自由添加參數。替換舉例:如將字符串“abcedfrbcxybc”中的字串1“bc”替換為子串2“ghi”後為“aghiedfrghixyghi”,主函數main完成字符串和子串的輸入,調用函數fun得到替換後的字符串,最後在主函數中輸出新串及由fun函數計算出來的長度16。若將字符串“abcedfrbceybce”中的字串1“bce”替換為子串2“gh”後為“aghdfrghygh”,長度為11.如果子串1不在str中,則fun函數只統計字符串長度。

最佳回答:


半成品

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

void StrReplaceB(char* strSrc, char* strFind, char* strReplace)
{
    while (*strSrc != '\0')
    {
        if (*strSrc == *strFind)
        {
            if (strncmp(strSrc, strFind, strlen(strFind)) == 0)
            {
                int i = strlen(strFind);
                int j = strlen(strReplace);
                char* q = strSrc+i;
                char* p = q;//p、q均指向剩余字符串的首地址
                char* repl = strReplace;
                int lastLen = 0;
                while (*q++ != '\0')
                    lastLen++;
                char* temp = new char[lastLen+1];//臨時開辟一段內存保存剩下的字符串,防止內存覆蓋
                for (int k = 0; k < lastLen; k++)
                {
                    *(temp+k) = *(p+k);
                }
                *(temp+lastLen) = '\0';
                while (*repl != '\0')
                {
                    *strSrc++ = *repl++;
                }
                p = strSrc;
                char* pTemp = temp;//回收動態開辟內存
                while (*pTemp != '\0')
                {
                    *p++ = *pTemp++;
                }
                delete temp;
                *p = '\0';
            }
            else
                strSrc++;
        }
        else
            strSrc++;
    }
}
void main()
{
    char str1[40]="abcedfrbcxybc",str2[]="bc",str3[]="ghi";
    StrReplaceB(str1, str2, str3);
    printf("%s\n",str1);
}

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