// 线性表2.1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define LENGTH 60
#define ADDLENGTH 4
//
//
typedef struct string{
char *strings;
int length;//保存字符串的长度
int start;//
}STRING;
删除字符
bool deletestring(STRING &a,int pos,int num);
//增加字符
bool addstrings(STRING &a,char *insertstring);
bool insertstringsbypos(STRING &a,char &insertstring,unsigned int pos);
//
int _tmain(int argc, _TCHAR* argv[])
{
STRING s;
s.strings=(char*)malloc(LENGTH+1);
if(!s.strings)printf("failed to malloc\0");
s.length=_msize(s.strings);
s.start=0;
char *insert="a webpage made by chen";/*23 how to free a memory?* 答:insert在栈内,“a webpage made by chen”是代码片段运行时加载入内存*/
strcpy_s(s.strings,_msize(s.strings),"http://idorobots.com");//后面会自动加'\0'21
addstrings(s,insert);
//insertstringsbypos(s,*insert,0);
deletestring(s,0,8);
char *newbase=s.strings;
while(*newbase!=NULL){
s.start++;
newbase++;
}
printf("%s\ns.start:%d\ts.length:%d\n",s.strings,s.start,_msize(s.strings));
free(s.strings);
system("pause");
return 0;
}
bool addstrings(STRING &a,char *insertstring){//在原来数据尾部加新数据
char *newbase=a.strings;
int stringlength;
while(*newbase!=NULL){
a.start++;
newbase++;
}
if(_msize(a.strings)-a.start<strlen(insertstring))
{ stringlength=strlen(insertstring)+_msize(a.strings);
a.strings=(char*)realloc(a.strings,stringlength);
}
strcat_s(a.strings,_msize(a.strings),insertstring);
a.start=0;
return true;
}
bool insertstringsbypos(STRING &a,char &insertstring,unsigned int pos)
{
int stringlength;
int count;
a.start=strlen(a.strings);
if(insertstring==NULL||pos<0||pos>a.start){
return false;
}
int newmem=_msize(a.strings);
stringlength=strlen(&insertstring);
if(_msize(a.strings)-strlen(a.strings)<strlen(&insertstring))
{
newmem+=_msize(&insertstring);
a.strings=(char*)realloc(a.strings,newmem);
}
count=strlen(&insertstring);
printf("%d\n",count);
for(int b=0;b<count;b++)
{
for(int i=0;i<newmem-pos;i++)
{
*(a.strings+newmem-1-i)=*(a.strings+newmem-i-2);
}
// *(a.strings+b+pos-1)='\0';
}
for(int b=0;b<count;b++)
{
*(a.strings+pos-1+b)=*(&insertstring+b);
}
count=0;
a.start=0;
return true;
}
bool deletestring(STRING &a,int pos,int num)//当pos =0时程序出现卡顿
{
for(int i=0;i<num;i++)
{
for(int c=0;c<strlen(a.strings)-pos;c++)
{
*(a.strings+pos-1+c)=*(a.strings+pos+c);
}
*(a.strings+strlen(a.strings)-i-1)=32;
}
return true;
}
注意:deletestring自定义函数,pos参数为0时会出现以下错误提醒。
未找到解决方案