吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2583|回复: 4
收起左侧

[C&C++ 转载] 字符串删除子串

[复制链接]
caoxiaolin 发表于 2018-9-1 15:25
C和指针第六章课后题

[C] 纯文本查看 复制代码
#include <stdio.h>

int del_substr(char *str, char const *substr);

int main(void)
{
	char src[] = "ABCDEFG";
	//char *substr = "FGH";
	char *substr = "CDE";

	int ret = 0;
	ret = del_substr(src, substr);
	printf("ret = %d\n", ret);
	printf("%s\n", src);

	
	return 0;
}

int del_substr(char *str, char const *substr)
{
	char *t_str = str;
	char const *t_substr = substr;
	int flag = 0;

	char *find_str = NULL;

	//查找子串
	while (*t_str)
	{
		if (*t_str == *t_substr)
		{

			if (find_str == NULL)
			{
				find_str = t_str;  //指向第一次出现子串的位置
			}

			t_substr++;
			if (*t_substr == '\0') //找到目标子串
			{
				break;
			}
		}
		else
		{
			t_substr = substr; //复位指针
			find_str = NULL;
		}

		t_str++;
	}


	if (find_str == NULL)
	{
		flag = 0;
	}
	else
	{
		flag = 1;
		//进行删除除子串

		while (*t_str)
		{
			t_str++;
			*find_str = *t_str; //将后面的字符赋值过来

			find_str++;
		}

	}


	return flag;
}



配个图:
子符串删除子串.png


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

不苦小和尚 发表于 2018-9-1 15:36
厉害,学习学习
老伙计 发表于 2018-9-1 21:34
本帖最后由 老伙计 于 2018-9-1 22:48 编辑

    楼主的程序太罗嗦,看看这个代码:

[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <string.h>

int del_substr(char * str , char const * substr)
{
    int m    = strlen(str)            ;
    int n    = strlen(substr)         ;
    int flag = 0                      ;
    if (n > 0 && m >= n) {
        int c = 0                     ;
        int d = 0                     ;
        while(c < m) {
            if (! strncmp(& str[c] , substr , n)) {
                c = c + n             ;
                flag ++               ;
            } else {
                str[d ++] = str[c ++] ;
            }
        }
        str[d] = 0                    ;
    }
    return flag                       ;
}

int main(void)
{
    char src[] = "ABCDEFG"          ;
    //char *substr = "FGH"          ;
    char substr[] = "CDE"           ;
 
    int ret = 0                     ;
    ret = del_substr(src , substr)  ;
    printf("ret = %d\n" , ret)      ;
    printf("%s\n" , src)            ;
 
    return 0                        ;
}
 楼主| caoxiaolin 发表于 2018-9-2 07:39
老伙计 发表于 2018-9-1 21:34
楼主的程序太罗嗦,看看这个代码:

[mw_shl_code=cpp,true]#include

厉害! 但是书中不让用字符串函数所以就没往那边想
老伙计 发表于 2018-9-2 12:03
本帖最后由 老伙计 于 2018-9-2 12:12 编辑
caoxiaolin 发表于 2018-9-2 07:39
厉害! 但是书中不让用字符串函数所以就没往那边想

那咱就来一个不用字符串函数的:

[C++] 纯文本查看 复制代码
#include <stdio.h>

int del_substr(char * str, char const * substr)
{
    int m    = 0                ;
    int n    = 0                ;
    int flag = 0                ;
    while (str[m]) m ++         ;
    while (substr[n]) n ++      ;
    if (n > 0 && m >= n) {
        int c = 0               ;
        int d = 0               ;
        while(c < m) {
            int e = 0           ;
            if (m - c >= n) {
                for (int i = 0 ; i < n ; i ++) {
                    if (str[c + i] == substr[i]) e ++ ;
                    else break                        ;
                }
            }
            if (e == n) {
                c = c + n                             ;
                flag ++                               ;
            } else {
                if (flag) str[d] = str[c]             ;
                c ++                                  ;
                d ++                                  ;         
            }
        }
        str[d] = 0                                    ;
    }
    return flag                                       ;
}

int main(void)
{
    char src[] = "ABCDEFG"         ;
    //char *substr = "FGH"         ;
    char substr[] = "CDE"          ;
 
    int ret = 0                    ;
    ret = del_substr(src, substr)  ;
    printf("ret = %d\n" , ret)     ;
    printf("%s\n", src)            ;
 
    return 0                       ;
}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 20:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表