C++ 写类中的一个bug修复

 #include"wz.h"
 #include"sts.h"
class _string
{
    friend std::istream& operator>>(std::istream& is, _string& a);//bug 1 2
    friend std::ostream& operator<<(std::ostream& os,_string& a);
     
public:
    _string()     //默认构造函数
    {
        length = 0;
        b=new char[1];
        b[0]=‘\0‘;
   }  
         
     _string(char *a);   //构造函数
    _string(int n,char a);
    ~_string(); //析构函数
    _string(_string &a);  //复制构造函数
    int size(){return length;}  //获得字符串长度
    _string operator+(const _string& a);   //重载‘+‘操作符
    _string& operator+=(const _string& a);   //重载‘+=‘操作符
    _string& operator=(const _string& a);   //重载赋值操作符
     int operator<(const _string &a);
    int operator>(const _string &a);
    char& operator[]( int n);   //重载下标操作符
    _string  substr(int pos,int n);   //返回子字符串
   _string  substr(int pos);   //返回子字符串
 
 
 private:
    char *b;
    int length;
};

 
_string::_string(char *a)     //构造函数
{
    length = strlen(a);  
    b = new char[length+1];
    for(int  i= 0;i<length;i++)
    {
        b[i] = a[i];
    }
    b[length] = ‘\0‘;
}
 
_string::_string(int n,char a)
{
    b=new char[n+1];
    for(int  i= 0;i<n;i++)
    {
        b[i] =a;
    }
    b[n] = ‘\0‘;
}
 
_string::~_string()     //析构函数
{
    delete []b;
    length=0;
}
 
_string::_string(_string &a)      //复制构造函数
{
    length=a.size();
    b=new char [length+1];
   for(int  i = 0;i<length;i++)
    {
        b[i] = a.b[i];
    }
    b[length] = ‘\0‘;
}
 
_string  _string::operator+(const _string& a)    //重载+
{
    int newLen = length+a.length;
    char *str;
    str = new char[newLen+1];
    int count = 0;
    for(int i = 0;i<length;i++)
    {
        str[i] = this->b[i];
        count++;
    }
     
    for(int i =0;count<newLen;count++,i++)
    {
        str[i] = a.b[i];
    }
    str[newLen] = ‘\0‘;
    _string temp(str);
     
    return temp;
}
 
_string&  _string:: operator+=(const _string& a)   //重载+=
{
    int newLen = length+a.length;
    char *str;
    str = new char[newLen+1];
    int count = 0;
    for(int i = 0;i<length;i++)
    {
        str[i] = this->b[i];
        count++;
    }
     
    for(int i =0;count<newLen;count++,i++)
    {
        str[i] = a.b[i];
    }
    str[newLen] = ‘\0‘;
    _string temp(str);
    *this=temp;
    return *this;
    }
_string& _string:: operator=(const _string &a)    //重载=
  {
      if(this==&a)
          return *this;
 
      delete []b;
      length = a.length;
      b = new char[length+1];
      for(int  i = 0;i<length;i++)
    {
        b[i] = a.b[i];
    }
    b[length] = ‘\0‘;
          return *this;
 
}
int _string:: operator<(const _string &a)    
  {
   
  while (*this->b == *a.b)
{
if (*this->b == ‘?‘)
{
return 0;
}
this->b++;
b++;
}
if (*this->b - *a.b < 0)
{
return 1;
}
 else return 0;;
   
 
}
int _string:: operator>(const _string &a)    
  {
   
  while (*this->b == *a.b)
{
if (*this->b == ‘?‘)
{
return 0;
}
this->b++;
b++;
}
if (*this->b - *a.b >0)
{
return 1;
}
 else return 0;;
 
 
}
 
  char& _string:: operator[]( int n)  //重载下标操作符
  {
      if(n>length)
          return b[length-1];
      else
          return b[n];
  }
 
  ostream& operator<<(ostream& os, _string& a)  //重载输出符
  {
      os<<a.b<<endl;
      return os;
  }
/*
  istream& operator>>(std::istream& is, _string& a)  //重载输入符
  {  // 1 while(*a.b!=‘\0‘)
      // {is>>a.b ;}
       
     //2  a.b=new char[256];
      is>>a.b ;
      a.length=strlen(a.b);
      return is;
  }
 */
//  5
 
istream& operator>>(istream &is, _string &str)//输入
 {
char tem[1000];  //简单的申请一块内存
 is.get(tem,1000,‘\n‘);
str.length = strlen(tem);
str.b = new char[str.length + 1];
strcpy(str.b, tem);
return is;
}
 
 
 _string  _string::substr(int pos, int n)    //两个接受不同参数的substr函数,返回子字符串
  {
      char *p = new char[n+1];
      for(int i=0;i<n;i++)
      {
          p[i]=b[pos];
          pos++;
      }
      p[n]=‘\0‘;
      _string k(p);
      k.length=n;
      return  k;
 }
     
 _string  _string::substr(int pos)
 {
     int len=length;
     char *p=new char[len-pos+1];
     int t=pos;
     for(int i=0;t<len;t++,i++)
     {
         p[i]=b[t];
     }
     p[t]=‘\0‘;
      _string k(p);
      k.length=len-pos;
      return  k;
 }

int main (){;                    
 
_string a;
cin>>a;
cout<<a;
return 0;

 return 0;}

为了输入能 带空格 但是 这里可能有bug即失去第一个字符

时间: 2024-10-05 21:29:49

C++ 写类中的一个bug修复的相关文章

声明一个MyClass类,在类中声明一个常量,和一个成员方法

<?php class MyClass { //声明一个MyClass类,在类中声明一个常量,和一个成员方法 const CONSTANT = 'CONSTANT value'; //使用const声明一个常量,并直接赋上初使值 private $foo; private $sss; function __construct($foo,$sss){ $this->foo = $foo; $this->sss = $sss; } function showConstant() { //声明

java-B类中的得到A类中的一个map

1 B类中的想得到A类中的一个map结果 2 3 Class A{ 4 // 通过某种方法得到的transMap 5 B.setTransInfo(transMap); 6 7 } 8 9 Class B{ 10 11 private static Map<T> map = null; // get set方法省略 12 13 public static void setTransInfo(Map<T> transMap){ 14 map = transMap; 15 } 16 1

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的. 比如,下面代码例子中,有两方法,一个有@Transational注解,一个没有.如果调用了有注解的addPerson()方法,会启动一个Transaction:如果调用updatePersonByPhoneNo(),因为它内部调用了有注解的addPerson(),如果你以为系统也会为它启动一个Transaction,那就错了,实际上是没有的. @Service public cla

记录一个使用HttpClient过程中的一个bug

最近用HttpClient进行链接请求,开了多线程之后发现经常有线程hang住,查看线程dump java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketI

yarn client中的一个BUG的修复

org.apache.spark.deploy.yarn.Client.scala中的monitorApplication方法: /** * Report the state of an application until it has exited, either successfully or * due to some failure, then return a pair of the yarn application state (FINISHED, FAILED, * KILLED,

微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug

开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配置,还特意测试过这个细节,获取错误并理解了这个功能.但是现在回去再次测试 2008 的版本时,发现这个功能在 2008 中其实也是错误的,把我印象中的测试结果完全给推翻了,所以到现在已经搞不清楚我当时到底是如果得出这个错误的. 疑似功能 Bug 描述 在 SSIS 包中定义了用户自定义变量 - PV

mysql5.5复制环境中的一个bug

mysql5.5,主从复制环境中 binlog格式是ROW时 有表使用了mrg_myisam引擎 以上三个条件都满足时,恭喜你,当你insert一条记录时,你会看到从库不停的在重启,每次重启都做crash recovery. 这个bug存在于所有5.5版本中,bug记录:https://bugs.mysql.com/bug.php?id=73635. 解决办法: 升级到5.6版本,亲测5.6已修复该bug. 改binlog格式. 改引擎吧,不使用mrg_myisam引擎.

最近很火的微信牛牛棋牌房卡搭建的源码的一个BUG修复

最新版修复所有bug出租微信牛牛棋牌房卡搭建(h5.fanshubbs.com)扣扣1687054422 BUG说明:当后台设定某个玩家的控制赢率后.10局20局的就没有问题.当是大于20,就会出现玩到最后打到超过20局时,就会出现卡死,不发牌不准备也不结算.其实就是因为大番薯微信H5棋牌开发搭建每个作弊的玩家是都先设定好了牌的点数写到数据库里,发牌时先读取数据里设定的点数来发牌.因为原版的程序,只是能最多加到20局的牌做好.超过20局就没数据了,就出错了.但是没有写作弊的是完全没问题的. 附件

android上libevent dns解析的一个bug修复

在测试我们开发的一个 APK(使用了 libevent-2.1.3-alpha 作为网络库) 时发现一个奇怪的问题,域名解析有时报错 Non-recoverable name resolution failure .在公司偶尔报错,后来程序改动了一下,出错时重试几次,问题没再出现,以为好了.昨天换了个网络环境,结果报错几率变得非常大. 互联网搜索到这个错误的一个处理办法,说在使用 getnameinfo() 函数时需要显式指定其第二个参数 salen 为 sizeof(struct sockad