2013 华为校招机试题
第一题:
删除字符串中所有给定的子串(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
方法解析:C语言忘了差不多了,用了c++的string类型的substr()和erase()函数,还是比较简单的,代码如下:
1 #include "stdafx.h" 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 int delete_sub_str(const char *str, const char *sub_str,char *result_str) 6 { 7 string s_str = str; 8 string s_sub_str = sub_str; 9 int len=s_sub_str.size(); 10 int l = s_str.size(); 11 int num = 0; 12 if (l > 100) //输入字符串长度超过100 13 { 14 cout << "ERROR" << endl; 15 return -1; 16 } 17 if (len > l) //子串长度大于所给字符串 18 { 19 cout << "ERROR" << endl; 20 return -1; 21 } 22 for (int i = 0; i < s_str.size() - len+1; i++) 23 { 24 if (s_str.substr(i, len) == s_sub_str) //与子字符串比较 25 { 26 s_str.erase(i, len); //从下标i开始,删除len个字符 27 result_str=(char *)s_str.c_str(); 28 num++; 29 30 } 31 } 32 cout << result_str << endl; 33 return num; 34 } 35 int _tmain(int argc, _TCHAR* argv[]) 36 { 37 char s1[] = "abcde123abcd123"; 38 char s2[] = "123"; 39 char *s=s1; 40 int n = delete_sub_str(s1, s2,s); 41 cout << n << endl; 42 return 0; 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗