VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 186|回复: 1

[已解决]求问一下这道字符串删除的题,谢谢!

[复制链接]
41_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-14 16:34:12 | 显示全部楼层 |阅读模式
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;
}
求各位大佬帮助一下,谢谢!
最佳答案
57_avatar_small
2020-4-14 16:34:13
  1. #include<iostream>

  2. using namespace std;

  3. char* func(char* pStr, char* pSubStr)
  4. {
  5.         int nStrLen = strlen(pStr);//字符串长度
  6.         int nSubStrLen = strlen(pSubStr);//子串长度
  7.         for (int i = 0; i<nStrLen;)//查找字符串中每一个字符,注意,这里先不要写++i
  8.         {                               
  9.                 int key = 1;//第一个开关
  10.                 int key2 = 0;//第二个开关

  11.                 //如果第i个字符等于子串中的第一个字符
  12.                 if (pStr[i] == pSubStr[0])
  13.                 {
  14.                         //开始比较第i个字符后len2长度的每个字符是否跟子串的每个字符相等
  15.                         for (int j = i + 1, k = 1; k < nSubStrLen; ++j, ++k)
  16.                         {
  17.                                 if (pStr[j] != pSubStr[k])
  18.                                         key = 0;//只要有一个不等就标记key=0
  19.                         }
  20.                                
  21.                         if (key == 1)//如果每一个都相等,就开始删除字符串中和子串相同的内容
  22.                         {
  23.                                 int index = i;
  24.                                 while (index<nStrLen - nSubStrLen)//当index+len2<len1时就循环,不然取的str[index+len2]没有意义
  25.                                 {
  26.                                         pStr[index] = pStr[index + nSubStrLen];//每个字符一一覆盖
  27.                                         index++;
  28.                                 }
  29.                                 pStr[index] = '\0';//别忘记最后一个放结束符,否则原字符串的最后一个字符会循环输出直到原长度
  30.                                 key2 = 1;//如果进行了删除相同字符串操作,key2=1;
  31.                         }
  32.                 }

  33.                 //如果没有删除字符串那么i就加一,指向下一个字符继续比较
  34.                 //如果key2==1,那么就不要i++,因为删除字符串完了之后下标i就是指向下一个字符;如果依旧++i,那么当母串是aaaaa,子串是a时就会出问题
  35.                 if (key2 == 0)
  36.                         i++;
  37.         }

  38.         //该函数将原字符串修改直接返回,否则需要申明为static或者new
  39.         return pStr;
  40. }

  41. int  main() {
  42.         char  a[20], b[20];
  43.         cin >> a >> b;
  44.         char*  res = func(a, b);
  45.         cout << res << endl;
  46.         return  0;
  47. }
复制代码

代码参考:https://www.cnblogs.com/yuzilan/p/10626135.html

最佳答案

查看完整内容

代码参考:https://www.cnblogs.com/yuzilan/p/10626135.html




上一篇:弹出菜单的勾选与取消勾选
下一篇:链表删除最后一个节点的问题
57_avatar_middle
最佳答案
22 
在线会员 发表于 2020-4-14 16:34:13 | 显示全部楼层    本楼为最佳答案   
bestAnswer
  1. #include<iostream>

  2. using namespace std;

  3. char* func(char* pStr, char* pSubStr)
  4. {
  5.         int nStrLen = strlen(pStr);//字符串长度
  6.         int nSubStrLen = strlen(pSubStr);//子串长度
  7.         for (int i = 0; i<nStrLen;)//查找字符串中每一个字符,注意,这里先不要写++i
  8.         {                               
  9.                 int key = 1;//第一个开关
  10.                 int key2 = 0;//第二个开关

  11.                 //如果第i个字符等于子串中的第一个字符
  12.                 if (pStr[i] == pSubStr[0])
  13.                 {
  14.                         //开始比较第i个字符后len2长度的每个字符是否跟子串的每个字符相等
  15.                         for (int j = i + 1, k = 1; k < nSubStrLen; ++j, ++k)
  16.                         {
  17.                                 if (pStr[j] != pSubStr[k])
  18.                                         key = 0;//只要有一个不等就标记key=0
  19.                         }
  20.                                
  21.                         if (key == 1)//如果每一个都相等,就开始删除字符串中和子串相同的内容
  22.                         {
  23.                                 int index = i;
  24.                                 while (index<nStrLen - nSubStrLen)//当index+len2<len1时就循环,不然取的str[index+len2]没有意义
  25.                                 {
  26.                                         pStr[index] = pStr[index + nSubStrLen];//每个字符一一覆盖
  27.                                         index++;
  28.                                 }
  29.                                 pStr[index] = '\0';//别忘记最后一个放结束符,否则原字符串的最后一个字符会循环输出直到原长度
  30.                                 key2 = 1;//如果进行了删除相同字符串操作,key2=1;
  31.                         }
  32.                 }

  33.                 //如果没有删除字符串那么i就加一,指向下一个字符继续比较
  34.                 //如果key2==1,那么就不要i++,因为删除字符串完了之后下标i就是指向下一个字符;如果依旧++i,那么当母串是aaaaa,子串是a时就会出问题
  35.                 if (key2 == 0)
  36.                         i++;
  37.         }

  38.         //该函数将原字符串修改直接返回,否则需要申明为static或者new
  39.         return pStr;
  40. }

  41. int  main() {
  42.         char  a[20], b[20];
  43.         cin >> a >> b;
  44.         char*  res = func(a, b);
  45.         cout << res << endl;
  46.         return  0;
  47. }
复制代码

代码参考:https://www.cnblogs.com/yuzilan/p/10626135.html
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-22 18:08

Powered by CcTry.CoM

© 2009-2020 cctry.com

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