题目:(华为2010上机题)
在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
要求实现函数:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
【输入】 str:输入的被操作字符串
sub_str:需要查找并删除的特定子字符串
【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果
【返回】 删除的子字符串的个数
解答:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> int delete_sub_str(const char *str, const char *sub_str, char *result_str) { int count = 0; int tmp = 0; int sub_tmp = 0; int start_ptr = 0; int result_ptr = 1; while(*(str+tmp) != '\0'){ if(*(str+tmp) == *(sub_str+sub_tmp)){ tmp++; sub_tmp++; while(*(sub_str+sub_tmp) != '\0'){ if(*(str+tmp) != *(sub_str+sub_tmp)) break; else{ tmp++; sub_tmp++; } } if(*(sub_str+sub_tmp) != '\0'){ sub_tmp = 0; continue; } else{ count++; if(tmp-sub_tmp-start_ptr != 0){ realloc(result_str,strlen(result_str)+tmp-sub_tmp-start_ptr+1); memset(result_str+result_ptr-1, '\0', tmp-sub_tmp-start_ptr); strncat(result_str, str+start_ptr, tmp-sub_tmp-start_ptr); } result_ptr += tmp-sub_tmp-start_ptr; start_ptr += tmp-start_ptr; sub_tmp = 0; } } else tmp++; } realloc(result_str,strlen(result_str)+tmp-sub_tmp-start_ptr+1); memset(result_str+result_ptr-1, '\0', tmp-sub_tmp-start_ptr); strncat(result_str, str+start_ptr, tmp-sub_tmp-start_ptr); return count; } int main() { char *tmp = NULL; int n; tmp = malloc(1); memset(tmp,'\0',1); n = delete_sub_str("ababacdeabafg", "aba", tmp); printf("find %d substring.\n",n); printf("the result is:%s\n",tmp); free(tmp); return 0; }
参考资料: