文本编辑代码.docx

上传人:b****6 文档编号:13156949 上传时间:2023-06-11 格式:DOCX 页数:18 大小:17.62KB
下载 相关 举报
文本编辑代码.docx_第1页
第1页 / 共18页
文本编辑代码.docx_第2页
第2页 / 共18页
文本编辑代码.docx_第3页
第3页 / 共18页
文本编辑代码.docx_第4页
第4页 / 共18页
文本编辑代码.docx_第5页
第5页 / 共18页
文本编辑代码.docx_第6页
第6页 / 共18页
文本编辑代码.docx_第7页
第7页 / 共18页
文本编辑代码.docx_第8页
第8页 / 共18页
文本编辑代码.docx_第9页
第9页 / 共18页
文本编辑代码.docx_第10页
第10页 / 共18页
文本编辑代码.docx_第11页
第11页 / 共18页
文本编辑代码.docx_第12页
第12页 / 共18页
文本编辑代码.docx_第13页
第13页 / 共18页
文本编辑代码.docx_第14页
第14页 / 共18页
文本编辑代码.docx_第15页
第15页 / 共18页
文本编辑代码.docx_第16页
第16页 / 共18页
文本编辑代码.docx_第17页
第17页 / 共18页
文本编辑代码.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

文本编辑代码.docx

《文本编辑代码.docx》由会员分享,可在线阅读,更多相关《文本编辑代码.docx(18页珍藏版)》请在冰点文库上搜索。

文本编辑代码.docx

文本编辑代码

#include

#include

#include"chuan.cpp"

voidmain()

{

chars[100000];

chart[100000];

charp[100000];

charq[100000];

FILE*fp;

charch,name[20];

inti,j,k,n,m,l=0,num=0;

HStringS,T,P;

InitString(S);

InitString(T);

InitString(P);

printf("\n请输入您要进行的操作的代码:

\n0.打开文本。

\n1.输入字符。

\n");

scanf("%d",&m);

if(!

m)

{

printf("请输入打开文件的地址\n");

scanf("%s",name);

if((fp=fopen(name,"r+"))==NULL)

{

printf("cannotopenthefile!

");

exit(0);

}

ch=fgetc(fp);

while(ch!

=EOF)

{

q[l]=ch;

ch=fgetc(fp);

l++;

num++;

}

q[num]=NULL;

StrAssign(S,q);

printf("文本的字符数为:

\n%d\n",S.length);

print(S);

fclose(fp);

}

else

{

printf("请输入文本:

\n");

scanf("%s",&s);

StrAssign(S,s);

printf("文本字符数为%d\n文本处理为每行5字符的格式,处理后的文本如下:

\n",S.length);

print(S);

}

while(k)

{

printf("\n请输入您要进行的操作的代码:

\n1.查找字符。

\n2.插入字符。

\n3.删除字符。

\n");

scanf("%d",&n);

switch(n)

{

case1:

{

while(n)

{

printf("请输入需查找的字符:

");

scanf("%s",&p);

StrAssign(P,p);

Search(S,P);

printf("是否继续查找?

\n0.no\n1.yes\n");

scanf("%d",&n);

}

break;

}

case2:

{

while(n)

{

printf("请输入需插入字符的位置:

\n");

printf("页位置:

\n");

scanf("%d",&i);

printf("行位置:

\n");

scanf("%d",&j);

printf("第几个位置后:

\n");

scanf("%d",&k);

if(k>5||((i-1)*20+j-1)*5+k>S.length)

{

printf("error!

\n");

break;

}

printf("请输入需插入的字符:

\n");

scanf("%s",&t);

StrAssign(T,t);

insert(S,T,i,j,k);

printf("插入后所得文本字符数为:

%d\n插入后所得文本:

\n",S.length);

print(S);

printf("\n是否继续插入字符?

\n0.no\n1.yes\n");

scanf("%d",&n);

}

break;

}

case3:

{

while(n)

{

printf("请选择删除方式:

\n1.删除整行\n2.删除具体位置的字符\n");

scanf("%d",&n);

strdelete(S,n);

printf("\n删除后所得字符总数:

\n%d\n",S.length);

printf("删除后所得文本:

\n");

print(S);

printf("\n是否继续删除?

\n0.no\n1.yes\n");

scanf("%d",&n);

}

break;

}

default:

{

printf("error!

!

!

\n");

break;

}

}

printf("是否继续进行操作?

\n0.no\n1.yes\n");

scanf("%d",&k);

if(!

m)

{

fp=fopen(name,"w+");

fprintf(fp,"%s",S);

fclose(fp);

}

}

}

#include"stdlib.h"

#include"stdio.h"

#include"string.h"

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineOVERFLOW-1

#defineMAXCSIZE100

typedefintStatus;

typedefstruct

{

char*ch;

intlength;

}HString;

StatusInitString(HString&T)

{

T.ch=(char*)malloc(MAXCSIZE*sizeof(char));

if(!

T.ch)

returnERROR;

T.length=0;

returnOK;

}

StatusStrAssign(HString&T,char*chars)

{//生成一个其值等于串常量chars的串T

inti,k;

//char*c;

if(T.ch)free(T.ch);//释放T原有空间

//for(i=0,c=chars;c!

='\0';++i,++c);//求chars的长度i

i=strlen(chars);

if(!

i)

{

T.ch=NULL;

T.length=0;

}

else

{

if(!

(T.ch=(char*)malloc(i*sizeof(char))))

exit(OVERFLOW);

for(k=0;k

T.ch[k]=chars[k];

T.length=i;

}

returnOK;

}

intStrLength(HStringS)

{

returnS.length;

}

intStrCompare(HStringS,HStringT)

{

inti;

for(i=0;i

if(S.ch[i]!

=T.ch[i])

returnS.ch[i]-T.ch[i];

returnS.length-T.length;

}

StatusClearString(HString&S)

{

if(S.ch)

{

free(S.ch);

S.ch=NULL;

}

S.length=0;

returnOK;

}

StatusConcat(HString&T,HStringS1,HStringS2)

{//用T返回由S1和S2连接而成的新串

inti;

if(T.ch)free(T.ch);

if(!

(T.ch=(char*)malloc((S1.length+S2.length)*sizeof(char))))

exit(OVERFLOW);

for(i=0;i

T.ch[i]=S1.ch[i];

T.length=S1.length+S2.length;

for(i=0;i

T.ch[S1.length+i]=S2.ch[i];

returnOK;

}

StatusSubString(HString&Sub,HStringS,intpos,intlen)

{//用Sub返回串S的第pos个字符起长度为len的子串

inti;

if(pos<1||pos>S.length||len<0||len>S.length-pos+1)

returnERROR;

if(Sub.ch)free(Sub.ch);

if(!

len)

{

Sub.ch=NULL;

Sub.length=0;

}

else

{

Sub.ch=(char*)malloc(len*sizeof(char));

for(i=0;i

Sub.ch[i]=S.ch[i+pos-1];

Sub.length=len;

}

returnOK;

}

intIndex(HStringS,HStringT,intpos)

{//返回子串T在主串S中第pos个字符之后的位置。

若不存在,则函数值为0

inti=pos,j=1;

while(i<=S.length&&j<=T.length)

{

if(S.ch[i-1]==T.ch[j-1])

{

++i;++j;

}

else

{

i=i-j+2;

j=1;

}

}

if(j>T.length)

returni-T.length;

else

return0;

}

voidPrintString(HStringS)

{

inti;

for(i=0;i

printf("%c",S.ch[i]);

printf("\n");

}

StatusStrDelete(HString&S,intpos,intn)

{

if(S.length

inti=pos;

for(i;i

S.ch[i-1]=S.ch[i+n-1];

S.length=S.length-n;

returnOK;

}

StatusDeleteSame(HString&S,HString&T)

{//从串S中删除所有和串T相同的子串

if(S.length

inti=1;

for(i;i<=S.length-T.length+1;)//当S.length在不断减少,i就不能随之增加了

{

//printf("%d\n",Index(S,T,1));

if(Index(S,T,1))

{

StrDelete(S,Index(S,T,1),T.length);//printf("%d\n",S.length);PrintString(S);

if(S.length

PrintString(S);

}

else

{

PrintString(S);break;

}

}

returnOK;

}

voidget_next(HStringS,intnext[])

{//求模式串T的next函数值并存入数组next

inti=1;

next[1]=0;

intj=0;

while(i

{

if(j==0||S.ch[i-1]==S.ch[j-1])

{

++i;++j;

next[i]=j;

}

else

j=next[j];

}

printf("next值:

\n");

for(i=1;i<=S.length;i++)

printf("%d",next[i]);

printf("\n");

}

voidget_nextval(HStringS,intnextval[])

{//求模式串T的next函数值并存入数组next

inti=1;

nextval[1]=0;

intj=0;

while(i

{

if(j==0||S.ch[i-1]==S.ch[j-1])

{

++i;++j;

if(S.ch[i-1]!

=S.ch[j-1])

nextval[i]=j;

else

nextval[i]=nextval[j];

}

else

j=nextval[j];

}

printf("nextval值:

\n");

for(i=1;i<=S.length;i++)

printf("%d",nextval[i]);

printf("\n");

}

voidinsert(HString&S,HString&T,inti,intj,intk)

{

intn,m,l=0,x;

m=T.length;

printf("插入的字符数为:

%d\n",m);

x=S.length;

n=((i-1)*20+j-1)*5+k;

for(x=x+m;x>=n+m;x--)

S.ch[x-1]=S.ch[x-m-1];

for(l=0;l<=m-1;l++)

{

S.ch[n]=T.ch[l];

n++;

S.length++;

}

S.ch[S.length]=NULL;

}

voidSearch(HStringS,HStringP)

{

inti=0,l=0,t=1,r;

inta,b,c;

while(i<=S.length-1)

{

r=P.length;

while(t!

=0&&r!

=0)

{

if(S.ch[i+t-1]==P.ch[t-1])

{t++;r--;}

else

{t=0;}

}

if(t==0)

{i=i+1;t=1;}

else

{

a=(i+1)/100+1;

b=((i+1)-(i+1)/100*100)/5+1;

c=(i+1)%5;

if(c==0)

{

c=5;b=b-1;

}

printf("在第%d页,第%d行,第%d个位置\n",a,b,c);

l++;

i=i+1;

t=1;

}

}

printf("字符一共出现%d次\n",l);

}

voidstrdelete(HString&S,intn)

{

inti,j,m,l,k;

switch(n)

{

case1:

{

printf("请输入需删除的行的位置:

\n页数:

\n");

scanf("%d",&i);

printf("行数\n");

scanf("%d",&j);

if(((i-1)*20+j-1)*5>S.length)

{

printf("error!

");

break;

}

l=S.length-((i-1)*20+j-1)*5;

if(l>=5)

{

for(m=((i-1)*20+j-1)*5;m<=S.length-6;m++)

S.ch[m]=S.ch[m+5];

l=5;

}

else

{

for(m=((i-1)*20+j-1)*5,k=1;k<=l;m++,k++)

S.ch[m]=NULL;

}

S.length-=l;

S.ch[S.length]=NULL;

break;

}

case2:

{

printf("请输入需删除字符的起始位置及字符总个数:

\n页数:

\n");

scanf("%d",&i);

printf("行数\n");

scanf("%d",&j);

printf("所在位置:

\n");

scanf("%d",&k);

printf("字符个数:

\n");

scanf("%d",&l);

if(((i-1)*20+j-1)*5+k+l-1>S.length)

{

printf("error!

");

break;

}

for(m=((i-1)*20+j-1)*5+k-1;m<=S.length-l-1;m++)

S.ch[m]=S.ch[m+l];

S.length-=l;

S.ch[S.length]=NULL;

break;

}

default:

{

printf("error!

\n");

break;

}

}

}

voidprint(HString&S)

{

inti,j,k,n,m=0;

while(m+1<=S.length)

{

i=(m+1)/100+1;

j=((m+1)-(m+1)/100*100)/5+1;

k=(m+1)%5;

printf("\n第%d页第%d行字符为:

",i,j);

for(n=1;n<=5;n++)

{

if(m+1>S.length)

break;

else

printf("%c",S.ch[m]);

m++;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2