|
@@ -0,0 +1,187 @@
|
|
|
+#include<bits/stdc++.h>
|
|
|
+using namespace std;
|
|
|
+typedef char atype;
|
|
|
+#define maxsize 100000
|
|
|
+typedef struct {
|
|
|
+ atype a[maxsize];
|
|
|
+ int size;
|
|
|
+}e_list;
|
|
|
+e_list s;
|
|
|
+e_list t;
|
|
|
+e_list p;
|
|
|
+void createlist(e_list &s,char str[]){
|
|
|
+ int n=strlen(str);
|
|
|
+ for(int i=0;i<n;i++){
|
|
|
+ s.a[i]=str[i];
|
|
|
+ }
|
|
|
+ s.size=n;
|
|
|
+}
|
|
|
+bool dislist(e_list s){
|
|
|
+ if(s.size==0)return false;
|
|
|
+ int j=0;
|
|
|
+ for(int i=0;i<s.size;i++){
|
|
|
+ printf("%c",s.a[i]);
|
|
|
+ j++;
|
|
|
+ if(j%20==0)printf("\n");
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
+}
|
|
|
+void shuzinum(e_list s){
|
|
|
+ int n=0,i=0;
|
|
|
+ while(s.a[i]){
|
|
|
+ if(isdigit(s.a[i]))n++;
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ printf("%d\n",n);
|
|
|
+}
|
|
|
+void zimunum(e_list s)
|
|
|
+{
|
|
|
+ int n=0,i=0;
|
|
|
+ while(s.a[i]!=0)
|
|
|
+ {
|
|
|
+ if(isalpha(s.a[i]))
|
|
|
+ n++;
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ printf("%d\n",n);
|
|
|
+}
|
|
|
+void konggenum(e_list s)
|
|
|
+{
|
|
|
+ int n=0,i;
|
|
|
+ for(i=0; i<s.size; i++)
|
|
|
+ {
|
|
|
+ if(isspace(s.a[i]))
|
|
|
+ n++;
|
|
|
+ }
|
|
|
+ printf("%d\n",n);
|
|
|
+}
|
|
|
+void zongzinum(e_list s)
|
|
|
+{
|
|
|
+ printf("%d\n",s.size);
|
|
|
+}
|
|
|
+void delestr(e_list s,e_list p)
|
|
|
+{
|
|
|
+ int i=0,j,succ=0;
|
|
|
+ while((i<=s.size-p.size+1)&&(!succ))
|
|
|
+ {
|
|
|
+ j=0,succ=1;
|
|
|
+ while((j<=p.size-1)&&succ)
|
|
|
+ if(p.a[j]==s.a[i+j])
|
|
|
+ j++;
|
|
|
+ else
|
|
|
+ succ=0;
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ if(succ)
|
|
|
+ {
|
|
|
+ for(j=0; j<s.size-p.size-1; j++)
|
|
|
+ {
|
|
|
+ s.a[i-1]=s.a[i+p.size-1];
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ s.size=s.size-p.size;
|
|
|
+ printf("删除后的字符串:");
|
|
|
+ for(i=0; i<s.size; i++)
|
|
|
+ {
|
|
|
+ printf("%c",s.a[i]);
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ printf("没有配对的子串\n");
|
|
|
+}
|
|
|
+bool TH(e_list s,int i,int j,e_list t){
|
|
|
+ int k;
|
|
|
+ e_list str;
|
|
|
+ str.size=0;
|
|
|
+ if(i<=0||j>s.size||i+j-1>s.size)
|
|
|
+ return false;
|
|
|
+ for(k=0;k<i-1;k++)
|
|
|
+ str.a[k]=s.a[k];
|
|
|
+ for(k=0;k<t.size;k++)
|
|
|
+ str.a[i+k-1]=t.a[k];
|
|
|
+ for(k=j+i-1;k<s.size;k++)
|
|
|
+ str.a[t.size+k-j]=s.a[k];
|
|
|
+ str.size=s.size-j+t.size;
|
|
|
+ printf("替换后的字符串为:");
|
|
|
+ dislist(str);
|
|
|
+}
|
|
|
+void TH_1(){
|
|
|
+ char n[]={"0"};
|
|
|
+ cin>>n;
|
|
|
+ createlist(t,n);
|
|
|
+ int i=3,j=3;
|
|
|
+ TH(s,i,j,t);
|
|
|
+}
|
|
|
+void TH_2(){
|
|
|
+ char m[maxsize],n[maxsize];
|
|
|
+ scanf("%s%s",m,n);
|
|
|
+ char *p;
|
|
|
+ p=strstr(s.a,m);
|
|
|
+ if(p){
|
|
|
+ int i=p-s.a;
|
|
|
+ int j=strlen(m);
|
|
|
+ e_list h;h.size=strlen(n);
|
|
|
+ for(int i=0;i<strlen(n);i++)
|
|
|
+ h.a[i]=n[i];
|
|
|
+ TH(s,i+1,j,h);
|
|
|
+ }
|
|
|
+ else printf("NOT Find!");
|
|
|
+}
|
|
|
+bool TQCR(e_list &s,int n,int m,int i){
|
|
|
+ e_list s1,s2,str;
|
|
|
+ str.size=0;
|
|
|
+ int l=0,j;
|
|
|
+ if(n+m>s.size)return false;
|
|
|
+ for(int j=n-1;j<n+m-1;j++)
|
|
|
+ s2.a[l++]=s.a[j];
|
|
|
+ s2.size=l;
|
|
|
+ for(j=0;j<i-1;j++)
|
|
|
+ str.a[j]=s.a[j];
|
|
|
+ for(j=0;j<s2.size;j++)
|
|
|
+ str.a[j+i-1]=s2.a[j];
|
|
|
+ for(j=i-1;j<s.size;j++)
|
|
|
+ str.a[j+s2.size]=s.a[j];
|
|
|
+ str.size=s.size+s2.size;
|
|
|
+ for(j=0;j<str.size;j++)
|
|
|
+ s.a[j]=str.a[j];
|
|
|
+ s.size=str.size;
|
|
|
+}
|
|
|
+void caidan(){
|
|
|
+ printf("********************文本编辑*******************************\n");
|
|
|
+ printf("* 1.全部字母个数 *\n");
|
|
|
+ printf("* 2.数字个数 *\n");
|
|
|
+ printf("* 3.空格个数 *\n");
|
|
|
+ printf("* 4.文章总个数 *\n");
|
|
|
+ printf("* 5.输出删除某一字符串后的文章 *\n");
|
|
|
+ printf("* 6.查找替换指定位置开始的指定长度的字符串 *\n");
|
|
|
+ printf("* 7.查找替换指定的字符串 *\n");
|
|
|
+ printf("* 8.在指定位置提取字符串在指定位置插入 *\n");
|
|
|
+ printf("* 9.退出编辑 *\n");
|
|
|
+ printf("***********************************************************\n");
|
|
|
+ int ch,i=1;
|
|
|
+ char n[]={"0"};e_list h;
|
|
|
+ while(i){
|
|
|
+ printf("\n请输入您所需要模块:");
|
|
|
+ scanf("%d",&ch);
|
|
|
+ switch(ch){
|
|
|
+ case 1:printf("全部字母个数:");zimunum(s);break;
|
|
|
+ case 2:printf("数字个数:");shuzinum(s);break;
|
|
|
+ case 3:printf("空格个数:");konggenum(s);break;
|
|
|
+ case 4:printf("文章总个数:");zongzinum(s);break;
|
|
|
+ case 5:printf("删除某一字符串后的文章:");printf("\n请输入您要删除的字符串:");
|
|
|
+ cin>>n;createlist(h,n);delestr(s,h);break;
|
|
|
+ case 6:printf("查找替换指定位置开始的指定长度的字符串:");TH_1();break;
|
|
|
+ case 7:printf("查找替换指定的字符串:");TH_2();break;
|
|
|
+ case 8:printf("在指定位置提取字符串在指定位置插入");
|
|
|
+ int i,j,k;cin>>i>>j>>k;TQCR(s,i,j,k);dislist(s);break;
|
|
|
+ case 9:printf("退出编辑\n");exit(0);break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+int main(){
|
|
|
+ char wenben[]={"abcdefghijklmnopqrstuvwxyz"};
|
|
|
+ createlist(s,wenben);
|
|
|
+ caidan();
|
|
|
+ return 0;
|
|
|
+}
|