C语言编程笔试题(一直更新)

待入职的这段日子,生活也不能没有目标。就来做笔试题咯。、

1. 删除字符串中所有给定的子串

问题描述:
在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。

要求实现函数:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)

【输入】 str:输入的被操作字符串

            sub_str:需要查找并删除的特定子字符串

【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果

【返回】 删除的子字符串的个数

注:

I、   子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:

在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果

匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。

II、  输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。

示例
输入:str = "abcde123abcd123"

sub_str = "123"

输出:result_str = "abcdeabcd"

返回:2

 

输入:str = "abcde123abcd123"

sub_str = "1234"

输出:result_str = "abcde123abcd123"

返回:0

考试时间:12:50-13:50 太久没写过了,竟然调了1h...哎

//自己写的//

#include <stdio.h>
#include <string.h>

int delete_sub_str(const char *str, const char *sub_str, char *result_str)
{
	/*测量替换字符串长度*/
	int num=strlen(sub_str);
    int str_num=1;
	int rep_str_num=0;

	/*建立目标字符串*/
	char result[100]="";
	int i=0;
	(char *)result_str=&result;
start:
	while(*str!='\0')
	{
		/*匹配首字符*/
		while((*str)==*(sub_str))
		{
			/*逐渐匹配后面字符*/
			while(str_num<num)
			{
				if(*(str+str_num)!=*(sub_str+str_num))
				{
					goto result;
				}
				str_num++;
			}
			rep_str_num++;//匹配成功
			str_num=0;
			while(str_num<=num) //跳过
			{	
				str=str+num;
				goto start;
			}

		}
result:
		*(result_str)=*(str++);//写入目标字符串
		result_str++;
		
		
	}
	while(result[i]!='\0')
	{	
		printf("%c",result[i]);
		i++;
	}
	printf("\n");
	return rep_str_num;
}

void main(void)
{
	char *result;
	int rep_str_num=delete_sub_str("abcde123abcd123","123",result);
	printf("rep_str_num=%d\n",rep_str_num);

}

别人的优秀算法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*删除字串函数,在src中删除sub子串,并将结果保存在result字符串中*/
int delSubStr(char * sr
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值