問題描述:
在給定字串中尋找所有特定子串並刪除,如果沒有找到相應子串,則不作任何操作。
要求實現函數:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
【輸入】 str:輸入的被操作字串
sub_str:需要尋找並刪除的特定子字串
【輸出】 result_str:在str字串中刪除所有sub_str子字串後的結果
【返回】 刪除的子字串的個數
註:
I、 子串匹配只考慮最左匹配情況,即只需要從左至右進行字串匹配的情況。比如:
在字串"abababab"中,採用最左匹配子串"aba",可以匹配2個"aba"字串。如果
匹配出從左至右位置2開始的"aba",則不是最左匹配,且只能匹配出1個"aba"字串。
II、 輸入字串不會超過100 Bytes,請不用考慮超長字串的情況。
樣本
輸入:str = "abcde123abcd123"
sub_str = "123"
輸出:result_str = "abcdeabcd"
返回:2
輸入:str = "abcde123abcd123"
sub_str = "1234"
輸出:result_str = "abcde123abcd123"
返回:0
思路:遍曆原字串,當出現和子串首位相等的字元時停止,接下來用strncmp()函數判斷接下來的若干位是否相等,並根據結果做相應處理。
代碼如下:由於測試資料較少,出現錯誤在所難免,希望發現的朋友指正,不甚感激!
#include <stdio.h>#include <string.h>int delete_sub_str(const char *str, const char *sub_str, char *result_str);int main(){char *str = "abcde123abcd123";char *sub_str = "1234";char result[100];printf("%d\n%s\n", delete_sub_str(str, sub_str, result), result);return 0;}int delete_sub_str(const char *str, const char *sub_str, char *result_str){int count = 0;int str_len = strlen(str);int sub_str_len = strlen(sub_str);if (str == NULL){result_str = NULL;return 0;}if (str_len < sub_str_len || sub_str == NULL){while (*str != '\0'){*result_str = *str;str++;result_str++;}return 0;}while (*str != '\0'){while (*str != *sub_str && *str != '\0'){*result_str = *str;str++;result_str++;}if (strncmp(str, sub_str, sub_str_len) != 0){*result_str = *str;str++;result_str++;continue;}else{count++;str += sub_str_len;}}*result_str = '\0';return count;}