從一個字串中刪除其包含的某個(第一個)子串

來源:互聯網
上載者:User

函數原型:

int del_substr(char *str,char const *substr);

首先應該判斷substr是否在str中,如果並未出現則返回0;

如果出現,函數應該吧str中位於該子串後面的所有字元複製到該子串的位置,從而刪除這個子串,然後函數返回1。如果substr多次出現在str中,函數只刪除第一次出現的子串,函數的第二個參數絕對不應該被修改。

源碼:

int del_substr(char *str,char const *substr){if(str == NULL || substr == NULL){return 0;}//標記str中substr開始的位置char * begin = str;//標記str中substr結束的位置char * end = str;//substr用於比較的遊標指標char const * index = substr;while(*begin != '\0' && *end != '\0'){//在str中尋找substrwhile(*begin != *index){begin++;}end = begin + 1;index++;while(*index == *end && *index != '\0' && *end != '\0'){index++;end++;}//如果index和end同時到達各自的字串尾部,substr子串在str中被找到//例如str:"abcdeXYZ",substr:"XYZ"if(*index == '\0' && *end == '\0'){*begin = '\0';printf(str);return 1;}/* 如果index到達substr字串尾部,而end沒有到達str的尾部,substr子串在str中被找到 * 例如str:"abcdeXYZmn",substr:"XYZ" */else if(*index == '\0' && *end != '\0'){    while(*begin++ = *end++);printf(str);return 1;}/* 如果index未到達substr字串尾部,而end有到達str的尾部,substr子串在str中未被找到 * 例如str:"abcdeXYZmn",substr:"XYZmnST" */else if(*index != '\0' && *end == '\0'){printf(str);return 0;}/*字串匹配尚未完成 * 例如str:"XYZabcdeXYZmnSTghd",substr:"XYZmnST" */else{begin++;end = begin;index = substr;}}printf(str);return 0;}

對於str包含多個substr的情況如果需要刪除str中所有的substr可以使用上面的函數進行遞迴調用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.