C语言——删除字符串中的指定子串

问题描述: 

在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
要求实现函数: 
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()函数判断接下来的若干位是否相等,并根据结果做相应处理。

代码如下:由于测试数据较少,出现错误在所难免,希望发现的朋友指正,不甚感激!

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3.   
  4. int delete_sub_str(const char *str, const char *sub_str, char *result_str);  
  5.   
  6. int main()  
  7. {  
  8.     char *str = "abcde123abcd123";  
  9.     char *sub_str = "1234";  
  10.     char result[100];  
  11.   
  12.     printf("%d\n%s\n", delete_sub_str(str, sub_str, result), result);  
  13.   
  14.     return 0;  
  15. }  
  16.   
  17. int delete_sub_str(const char *str, const char *sub_str, char *result_str)  
  18. {  
  19.     int count = 0;  
  20.     int str_len = strlen(str);  
  21.     int sub_str_len = strlen(sub_str);  
  22.   
  23.     if (str == NULL)  
  24.     {  
  25.         result_str = NULL;  
  26.         return 0;  
  27.     }  
  28.   
  29.     if (str_len < sub_str_len || sub_str == NULL)  
  30.     {  
  31.         while (*str != '\0')  
  32.         {  
  33.             *result_str = *str;  
  34.             str++;  
  35.             result_str++;  
  36.         }  
  37.   
  38.         return 0;  
  39.     }  
  40.   
  41.     while (*str != '\0')  
  42.     {  
  43.         while (*str != *sub_str && *str != '\0')  
  44.         {  
  45.             *result_str = *str;  
  46.             str++;  
  47.             result_str++;  
  48.         }  
  49.   
  50.         if (strncmp(str, sub_str, sub_str_len) != 0)  
  51.         {  
  52.             *result_str = *str;  
  53.             str++;  
  54.             result_str++;  
  55.             continue;  
  56.         }  
  57.         else  
  58.         {  
  59.             count++;  
  60.             str += sub_str_len;  
  61.         }  
  62.     }  
  63.   
  64.     *result_str = '\0';  
  65.   
  66.     return count;  

猜你喜欢

转载自blog.csdn.net/Eleanor_12/article/details/53872639