|
20驿站币
【问题描述】请你编写一个函数,对字符串A和字符串B进行减法操作,减法操作是将A中所有的B依次删除,并返回做减法后的新字符串指针,
函数原型如下:char* func(char* A, char* B);
【输入形式】
字符串A
字符串B
【输出形式】
减法后的新字符串
【样例输入一】
aaabbb
bb
【样例输出一】
aaab
【样例输入二】
aabbababb
ab
【样例输出二】
abb
【样例说明】 测试用例中两个字符串的长度均小于20大于0
【评分标准】五个测试用例平均打分
【注意】可以使用strlen()函数strcpy()函数等,但是请不要直接使用查找字符串的函数
主函数是这样的:
int main(){
char a[20], b[20];
cin>>a>>b;
char* res = func(a, b);
cout<<res<<endl;
return 0;
}
求各位大佬帮助一下,谢谢!
- #include<iostream>
- using namespace std;
- char* func(char* pStr, char* pSubStr)
- {
- int nStrLen = strlen(pStr);//字符串长度
- int nSubStrLen = strlen(pSubStr);//子串长度
- for (int i = 0; i<nStrLen;)//查找字符串中每一个字符,注意,这里先不要写++i
- {
- int key = 1;//第一个开关
- int key2 = 0;//第二个开关
- //如果第i个字符等于子串中的第一个字符
- if (pStr[i] == pSubStr[0])
- {
- //开始比较第i个字符后len2长度的每个字符是否跟子串的每个字符相等
- for (int j = i + 1, k = 1; k < nSubStrLen; ++j, ++k)
- {
- if (pStr[j] != pSubStr[k])
- key = 0;//只要有一个不等就标记key=0
- }
-
- if (key == 1)//如果每一个都相等,就开始删除字符串中和子串相同的内容
- {
- int index = i;
- while (index<nStrLen - nSubStrLen)//当index+len2<len1时就循环,不然取的str[index+len2]没有意义
- {
- pStr[index] = pStr[index + nSubStrLen];//每个字符一一覆盖
- index++;
- }
- pStr[index] = '\0';//别忘记最后一个放结束符,否则原字符串的最后一个字符会循环输出直到原长度
- key2 = 1;//如果进行了删除相同字符串操作,key2=1;
- }
- }
- //如果没有删除字符串那么i就加一,指向下一个字符继续比较
- //如果key2==1,那么就不要i++,因为删除字符串完了之后下标i就是指向下一个字符;如果依旧++i,那么当母串是aaaaa,子串是a时就会出问题
- if (key2 == 0)
- i++;
- }
- //该函数将原字符串修改直接返回,否则需要申明为static或者new
- return pStr;
- }
- int main() {
- char a[20], b[20];
- cin >> a >> b;
- char* res = func(a, b);
- cout << res << endl;
- return 0;
- }
复制代码
代码参考:https://www.cnblogs.com/yuzilan/p/10626135.html
|
最佳答案
查看完整内容
代码参考:https://www.cnblogs.com/yuzilan/p/10626135.html
上一篇: 弹出菜单的勾选与取消勾选下一篇: 链表删除最后一个节点的问题
|