類是編程人員表達(dá)自定義數(shù)據(jù)類型的C++機(jī)制。它和C語(yǔ)言中的結(jié)構(gòu)類似,C++類

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元吉安做網(wǎng)站,已為上家服務(wù),為吉安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
支持?jǐn)?shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O(shè)計(jì),從某種意義上說(shuō),也就是數(shù)據(jù)類型的設(shè)
計(jì)和實(shí)現(xiàn)。
那么
String
類的原型如下
class
String
{
public:
String(const
char
*str=NULL);
//構(gòu)造函數(shù)
String(const
String
other);
//拷貝構(gòu)造函數(shù)
~String(void);
//析構(gòu)函數(shù)
String
operator=(const
String
other);
//等號(hào)操作符重載,賦值函數(shù)
ShowString();
private:
char
*m_data;
//字符指針
};
String::~String()
{
delete
[]
m_data;
//析構(gòu)函數(shù),釋放地址空間
}
String::String(const
char
*str)
{
if
(str==NULL)//當(dāng)初始化串不存在的時(shí)候,為m_data申請(qǐng)一個(gè)空間存放'/0';
{
m_data=new
char[1];
*m_data='/0';
}
else//當(dāng)初始化串存在的時(shí)候,為m_data申請(qǐng)同樣大小的空間存放該串;
{
int
length=strlen(str);
m_data=new
char[length+1];
strcpy(m_data,str);
}
}
String::String(const
String
other)//拷貝構(gòu)造函數(shù),功能與構(gòu)造函數(shù)類似。
{
int
length=strlen(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
}
String
String::operator
=(const
String
other)
//賦值函數(shù)
{
if
(this==other)//當(dāng)?shù)刂废嗤瑫r(shí),直接返回;
return
*this;
delete
[]
m_data;//當(dāng)?shù)刂凡幌嗤瑫r(shí),刪除原來(lái)申請(qǐng)的空間,重新開始構(gòu)造;
int
length=sizeof(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
return
*this;
}
String::ShowString()//由于m_data是私有成員,對(duì)象只能通過public成員函數(shù)來(lái)訪問;
{
coutthis-m_dataendl;
}
測(cè)試一下:
main()
{
String
AD;
char
*
p="ABCDE";
String
B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
main里面自己寫寫
#include stdio.h
#include malloc.h
typedef struct snode
{
char data;
struct snode *next;
} LinkStrNode;
int StrLength(LinkStrNode *s) //求串長(zhǎng)
{
int i=0;
LinkStrNode *p=s-next;
while (p!=NULL)
{ i++;
p=p-next;
}
return i;
}
LinkStrNode *DelStr(LinkStrNode *s,int i,int j) //串刪去
{
int k;
LinkStrNode *str,*p=s-next,*q,*r;
str=(LinkStrNode *)malloc(sizeof(LinkStrNode));
str-next=NULL;
r=str; //r指向新建鏈表的尾結(jié)點(diǎn)
if (i=0 || iStrLength(s) || j0 || i+j-1StrLength(s))
return str; //參數(shù)不正確時(shí)返回空串
for (k=0;ki-1;k++) //將s的前i-1個(gè)結(jié)點(diǎn)復(fù)制到str
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q-data=p-data;
r-next=q;r=q;
p=p-next;
}
for (k=0;kj;k++) //讓p沿next跳j個(gè)結(jié)點(diǎn)
p=p-next;
while (p!=NULL) //將結(jié)點(diǎn)p及其后的結(jié)點(diǎn)復(fù)制到str
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q-data=p-data;
r-next=q;r=q;
p=p-next;
}
r-next=NULL;
return str;
}
int main()
{
SqString s;
int i,j,k;
}
程序的大體思路可以是這樣:
str1是原字符串,str2是待插入的字符串,position是待插入的位置,我們可以這樣,用一個(gè)指針p_cur指向字符串1 str1中的待插入位置position,另一個(gè)指針p_end指向字符串1 str1的尾部,每次插入字符前,把str1中從當(dāng)前位置開始一直到結(jié)束字符全部后移一個(gè)位置,空出當(dāng)前位置,然后把要插入的字符放進(jìn)這個(gè)位置,這樣就完成了一個(gè)字符的插入,重復(fù)這個(gè)步驟,直到str2被完全插入。
代碼如下:
#include stdio.h
#include string.h
void insert_str(char str1[],char str2[],int position)
{
/*
insert_str()函數(shù)
功能:將字符串str2插入到str1的position位置處
參數(shù):char str1,char str2 ,int position
返回值:無(wú)
*/
int i;
char *p_end,*p_cur,*p;/*p_end指向第一個(gè)字符串的尾部,p_cur指向被插入的位置*/
p_end=str1+strlen(str1)-1;
p_cur=str1+position-1;
for(i=0;str2[i]!='\0';i++)
{
for(p=p_end;p=p_cur;p--)
{
*(p+1)=*p;/*從p_cur到p_end的全部元素后移一個(gè)位置,此時(shí)p_cur指向的位置就空出來(lái)了*/
}
*p_cur=str2[i];/*把字符串2中的字符插入空出來(lái)的位置*/
p_cur++;/*p_cur下移一個(gè)位置*/
p_end++;/*多了一個(gè)字符,因此p_end也下移一個(gè)位置*/
}
}
void main()
{
char s1[100],s2[20];
int position;
printf("輸入字符串1:\n");
gets(s1);
printf("輸入插入位置:");
do
{
scanf("%d",position);
while(getchar()!='\n');/*這一句可以把輸入position的時(shí)候輸入的回車去掉*/
}while(position0||positionstrlen(s1));
printf("輸入字符串2:\n");
gets(s2);
insert_str(s1,s2,position);
printf("字符串被插入后變成:\n");
puts(s1);
}
當(dāng)前標(biāo)題:c語(yǔ)言怎樣構(gòu)造字符函數(shù),c語(yǔ)言中構(gòu)造函數(shù)
URL標(biāo)題:http://chinadenli.net/article9/dsspcih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、App開發(fā)、定制開發(fā)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)