天天算法02——删除字符串中所给定的字符串
题目:(华为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;
}
参考资料:
浙公网安备 33010602011771号