zoukankan      html  css  js  c++  java
  • 天天算法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

  • 相关阅读:
    进程通信
    python模块成像库pillow
    python模块IO
    python模块StringIO和BytesIO
    DJango重写用户模型
    DJango模型Meta选项详解
    DJango中事务的使用
    批量删除文件
    批量修改文件名字或后缀
    自定义中间件实现插拔设计
  • 原文地址:https://www.cnblogs.com/bo083/p/2226377.html
Copyright © 2011-2022 走看看