• 天天算法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;
    }

    参考资料:

    http://bbs.auxten.com/read.php?tid=674773

  • 相关阅读:
    最长公共前缀
    无重复字符的最长子串
    文章采集代码
    网络验证常见的攻击方式与防御手段
    初创公司如何避免服务器被攻击
    拒绝ssh远程暴力破解
    我公司开了7年,靠的就是这套顶级销售打法撑下来!
    顶级销售的十个习惯,轻松签下百万千万合同!(值得背下来)
    顶级销售高手总结的 9 个方面
    一位顶级销售高手总结的“销售心得”!
  • 原文地址:https://www.cnblogs.com/bo083/p/2226377.html
Copyright © 2020-2023  润新知