[語法] String實做debug
//排的有點醜,請包涵
//DevC++編譯不過
//其指出的錯誤已加在code內
#include<iostream>
#include<string.h>
using namespace std;
class String
{
protected:
char *str;
int length;
int capacity;
public:
String()
{
str=new char[100];
memset(str,0,sizeof(char)*100);
length=0,capacity=100;
}
String(const char *a)//fixed:plus "const"
{
length=strlen(a),capacity=100;
if(length>=capacity)
{
str=new char[length+1];
memset(str,0,sizeof(char)*(length+1));
capacity=length+1;
strcpy(str,a);
//for(int i=0;i<=length;i++)str[i]=a[i];
}
else
{
str=new char[100];
strcpy(str,a);
//for(int i=0;i<=length;i++)str[i]=a[i];
str[length]=0;
}
}
String(const String &a)//fixed:plus "const"
{
length=a.length;
capacity=100;
if(a.length>=capacity)
{
//delete str;
str=new char[length+1];
capacity=length+1;
memset(str,0,sizeof(char)*(length+1));
strcpy(str,a.str);
}
else
{
str=new char[100];
strcpy(str,a.str);
str[length]=0;
}
}
~String()
{
delete []str;
length=0;
capacity=0;
}
friend bool operator==(const String &a,const char *b)
{
return strcmp(a.str,b)==0;
}
friend bool operator==(const String &a,const String &b)
{
return strcmp(a.str,b.str)==0;
}
friend bool operator==(const char *a,const String &b)
{
return strcmp(a,b.str)==0;
}
friend bool operator!=(const String &a,const char *b)
{
return (!(a==b));
}
friend bool operator!=(const String &a,const String &b)
{
return (!(a==b));
}
friend bool operator!=(const char *a,const String &b)
{
return (!(a==b));
}
friend ostream& operator<<(ostream& stream,const String& a)
{
return (stream<<a.str);
}
friend istream& operator>>(istream& stream,const String& a)
{
return stream>>a.str;
}
/*-------------------Error from here-----------------------------*/
const String& operator=(const String& a)
/*Error:must be a nonstatic function*/
/*Error:must take exactly two arguments*/
//已訂正
{
length=a.length;
/*invalid use of non-static data member*/
if(length>=this.capacity)/*invalid use again*/
{
delete str;
/*invalid use of 'this' in none member func.*/
/*non-static data member again*/
str=new char[length+1];
capacity=length+1;
strcpy(str,a.str);
//以下關於str、length、capacity幾乎都有invalid use的問題
//friend 訂正完後沒事了
}
else
{
strcpy(str,a.str);
}
}
const String& operator=(const char* a)
/*Error:must be a nonstatic function
Error:must take exactly two arguments*/
//已訂正
{
length=strlen(a);
if(length>=capacity)
{
delete str;
str=new char[length+1];
capacity=length+1;
strcpy(str,a);
}
else
{
strcpy(str,a);
}
}
friend const String operator+(const String& a,String& b)
{
char *k=new char[a.length+b.length+1];
strcpy(k,a.str);
strcat(k,b.str);
String Sum(k);
return Sum;
}
friend const String operator+(const char* a,String& b)
{
char *k=new char[strlen(a)+b.length+1];
strcpy(k,a);
strcat(k,b.str);
String Sum(k);
return Sum;
}
friend const String operator+(const String& a,char* b)
{
char *k=new char[a.length+strlen(b)+1];
strcpy(k,a.str);
strcat(k,b);
String Sum(k);
return Sum;
}
};
/*
請問要怎麼改才對呢?
另外,有時後會看到operator+(單引數)
但Dev C++會顯示錯誤
又是怎麼回事(已解)
*/
/*
再問一個問題
就是使用字串加法的時候
編譯器會顯示no matching function for call to 'String::String(const String)'
candidates are: String::String(String&) String::String(char*)
是指怎樣的錯?
(建構式要加上const,否則operator在配置暫存的String時會出錯)
*/
-
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.105.228
→
05/21 20:50, , 1F
05/21 20:50, 1F
→
05/21 20:52, , 2F
05/21 20:52, 2F
→
05/21 20:56, , 3F
05/21 20:56, 3F
→
05/21 20:59, , 4F
05/21 20:59, 4F
→
05/21 21:03, , 5F
05/21 21:03, 5F
※ 編輯: zenixls2 來自: 218.165.105.228 (05/21 21:30)
→
05/21 21:26, , 6F
05/21 21:26, 6F
→
05/21 21:28, , 7F
05/21 21:28, 7F
→
05/21 21:29, , 8F
05/21 21:29, 8F
→
05/21 21:29, , 9F
05/21 21:29, 9F
→
05/21 21:38, , 10F
05/21 21:38, 10F
※ 編輯: zenixls2 來自: 218.165.105.228 (05/21 21:48)
→
05/21 22:18, , 11F
05/21 22:18, 11F
→
05/21 22:44, , 12F
05/21 22:44, 12F
→
05/21 22:45, , 13F
05/21 22:45, 13F
※ 編輯: zenixls2 來自: 218.165.100.123 (05/22 21:04)