企业管理程序数据删除代码

之前在那个程序中有输入,有排序,有统计,但是我们要删除其中的一条记录,如何删除呢?今天刚写的代码,包含了注释,自己看看吧~
while(chose==3)
        {
            int tempcount=0;
            ifstream infile("data.txt"); //绑定文件
            string arr[1000];
            string del_str;
            string _str;
            infile>>_str;
            if(_str.empty())
            {
                cout<<"无数据!程序即将退出!"<<endl;
                break;
            }
            cout<<_str<<endl;//数据读入成功!
            cout<<"请输入你要删除的职工号"<<endl;
            cin>>del_str;
            del_str+="&";
            string::iterator p=_str.begin();
            string::iterator first=p;  //记住当前p所指向的字符串(str的首字符)
            string::iterator last=p;  //用于尾部的指针
            int ix=0;
            while(*p!=NULL)
            {
                string tempstr;  //临时str存放的是当前指向的属性,与del_str进行比较
                arr[ix]=*p;//
                ++p;           //将数据存进数组
                ++ix;      ///
                if(*p=='$')
                {
                    ++tempcount;
                    ++p;
                    for(int i=1;i<ix;i++)
                    {
                        arr[0]+=arr[i];
                    }
                    tempstr=arr[0];
                    cout<<tempstr<<endl;
                    if(tempstr==del_str)//如果当前的临时变量等于需要删除的变量
                    {
                        tempcount=1;                                        //每次找到匹配头的时候就将计数器重新置为1  因为找到了职工号,所以$已经有了1个,所以置为1而不是0
                      while(*p!='$'||tempcount!=6)                          //只要我们的$符号不为6,或者我们的*p还不为$,我们就继续执行循环体中的语句。
                      {
                          ++p;                              //一上来我们就要把指针p加一,这样我们就能够计算$符号的个数,来决定我们这个职工的所有属性到底指完了没。(☆_☆)/~~
                          if(*p=='$')
                          {
                              ++tempcount;
                          }
                      }
                      last=p;                       //最后,我们将last指针变为P当前所指的数据,这样我们就完成了first和last指针的正确数据指向!
                      p=_str.erase(first,last+1);//调用string类型的函数来删除两个指针中间的值,+1是为了删除最后一个$。↖(^ω^)↗
                    }
                    ix=0;
                    first=p;                                      //在这里我们将first的指针指向P,否则会产生指针永远指向头的情况,会造成只能顺序删除而不能随机删除的情况,
                }                                                 //这个情况debug了我一个小时,把first指针给忘了……细心很重要啊!(ー_ー)!!
               
            }
            ofstream("data.txt").close();        //清空原数据
            ofile.open("data.txt",ofstream::out | ofstream::app);  //重新打开文件
            ofile<<_str;   //将_str中的内容全部写入文件,这样做效率太低,不过我暂时没什么好办法,希望大神能给出更完美的算法,谢谢!
            chose=0;                        //给予跳出循环的条件,完成~!`(*∩_∩*)′
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值