运算符重载C++的字符串串联

String concatenation by operator overloading C++

本文关键字:字符串 重载 C++ 运算符      更新时间:2023-10-16

我无法通过运算符重载连接两个字符串。代码如下所示。

  #include<iostream>
  #include<string.h>
  using namespace std;
  class String
  {
  char *len;
  public:
         String(char *s);
         void display();
         String(){}
         void setData(char *s);
         //String(String &x); 
         ~String(); 
         String operator+(String);
         void extend(int l);         
   };
   void String::extend(int f)
   {
       len=(char *)realloc(len,(f+1)*sizeof(char));
   }     
   String String::operator+(String x)
   {
     String t;
     printf("%sn",len);
     t.setData(len);
     t.extend(strlen(len)+strlen(x.len));
     strcat(t.len,x.len);
     printf("%sn",t.len);
     return (t);
    }       
   String::~String()
   {
       delete len;  
    }                 
  void String::setData(char *s)
  {
      len=(char *)calloc(strlen(s)+1,sizeof(char));
      strcpy(len,s);
   }     
   String::String(char *s)
   {   
       len=(char *)calloc(strlen(s)+1,sizeof(char));                
       strcpy(len,s);
   }
   void String::display()
   {
        printf("%sn",len);
    }
  int main()
  {
    String a=String("United ");
    String b,c;
    b.setData("States");
    c=a+b;
    c.display();
    system("pause");
    return 0;
   }                                       

问题是字符串在运算符重载函数中被连接,但当返回对象并调用显示函数时,输出是垃圾值。

您的代码不遵循规则三。您应该手动重载复制构造函数和赋值运算符。此外,您不能在缓冲区上使用delete,该缓冲区由malloc/calloc/realloc分配,请使用free

使用

<string> 

用c++库代替

<string.h> 

它是一个c库。

能够找出问题所在,析构函数的定义就像一个错误。一旦运算符函数超出作用域,就会调用析构函数并销毁对象。

此代码在这里应该可以正常工作。我知道已经很晚了,但还是。

#include<iostream.h>
#include<conio.h>
#include<string.h>
class String
{
    char x[40];
    public:
    String() { }          // Default Constructor
    String( char s[] )
    {
        strcpy(x,s);
    }
    String( String & s )
    {
        strcpy(x,s.x );
    }
    String operator + ( String s2 )
    {
        String res;
        strcpy( res.x,x );
        strcat( res.x,s2.x);
        return(res);
    }
    friend ostream & operator << ( ostream & x,String & s );
};
ostream & operator << ( ostream & x,String & s )
{
    x<<s.x;
    return(x);
}
int main()
{
    clrscr();
    String s1="Vtu";
    String s2="Belgaum";
    String s3 = s1+ s2;      
    cout<<"nns1 = "<<s1;
    cout<<"nns2 = "<<s2;
    cout<<"nns1 + s2 = "<<s3;
    getch();
    return 0;
}