编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明]
本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。
1. 删除字符串中所有给定的子串(40分)
问题描述:
在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
要求实现函数:
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
#include <iostream>
using namespace std;
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
{
int n=0,point=0;
int lenStr=strlen(str),lenSubstr=strlen(sub_str);
cout<<lenStr<<' '<<lenSubstr<<endl;
for(int i=0;i<lenStr;i++)
{
int temp=i,j=0;
while(str[i]==sub_str[j] && i<lenStr &&j<lenSubstr)
{
i++;
j++;
}
if(j!=lenSubstr)
{
result_str[point]=str[temp];
point=point+1;
i=temp;
}
else
{
n++;
i=i-1;
}
}
result_str[point]='\0';
return n;
}
int main()
{
char *str = "abcde123abcd123";
char *sub_str = "1234";
char *result;
int len=strlen(str);
result=(char*)malloc(sizeof(char)*len+1);
int n=delete_sub_str(str,sub_str,result);
cout<<n<<" "<<result<<endl;
return 0;
}