函數原型:
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可以使用上面的函數進行遞迴調用。