4634. 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef char atype;
  4. #define maxsize 100000
  5. typedef struct {
  6. atype a[maxsize];
  7. int size;
  8. }e_list;
  9. e_list s;
  10. e_list t;
  11. e_list p;
  12. void createlist(e_list &s,char str[]){
  13. int n=strlen(str);
  14. for(int i=0;i<n;i++){
  15. s.a[i]=str[i];
  16. }
  17. s.size=n;
  18. }
  19. bool dislist(e_list s){
  20. if(s.size==0)return false;
  21. int j=0;
  22. for(int i=0;i<s.size;i++){
  23. printf("%c",s.a[i]);
  24. j++;
  25. if(j%20==0)printf("\n");
  26. }
  27. printf("\n");
  28. }
  29. void shuzinum(e_list s){
  30. int n=0,i=0;
  31. while(s.a[i]){
  32. if(isdigit(s.a[i]))n++;
  33. i++;
  34. }
  35. printf("%d\n",n);
  36. }
  37. void zimunum(e_list s)
  38. {
  39. int n=0,i=0;
  40. while(s.a[i]!=0)
  41. {
  42. if(isalpha(s.a[i]))
  43. n++;
  44. i++;
  45. }
  46. printf("%d\n",n);
  47. }
  48. void konggenum(e_list s)
  49. {
  50. int n=0,i;
  51. for(i=0; i<s.size; i++)
  52. {
  53. if(isspace(s.a[i]))
  54. n++;
  55. }
  56. printf("%d\n",n);
  57. }
  58. void zongzinum(e_list s)
  59. {
  60. printf("%d\n",s.size);
  61. }
  62. void delestr(e_list s,e_list p)
  63. {
  64. int i=0,j,succ=0;
  65. while((i<=s.size-p.size+1)&&(!succ))
  66. {
  67. j=0,succ=1;
  68. while((j<=p.size-1)&&succ)
  69. if(p.a[j]==s.a[i+j])
  70. j++;
  71. else
  72. succ=0;
  73. i++;
  74. }
  75. if(succ)
  76. {
  77. for(j=0; j<s.size-p.size-1; j++)
  78. {
  79. s.a[i-1]=s.a[i+p.size-1];
  80. i++;
  81. }
  82. s.size=s.size-p.size;
  83. printf("删除后的字符串:");
  84. for(i=0; i<s.size; i++)
  85. {
  86. printf("%c",s.a[i]);
  87. }
  88. printf("\n");
  89. }
  90. else
  91. printf("没有配对的子串\n");
  92. }
  93. bool TH(e_list s,int i,int j,e_list t){
  94. int k;
  95. e_list str;
  96. str.size=0;
  97. if(i<=0||j>s.size||i+j-1>s.size)
  98. return false;
  99. for(k=0;k<i-1;k++)
  100. str.a[k]=s.a[k];
  101. for(k=0;k<t.size;k++)
  102. str.a[i+k-1]=t.a[k];
  103. for(k=j+i-1;k<s.size;k++)
  104. str.a[t.size+k-j]=s.a[k];
  105. str.size=s.size-j+t.size;
  106. printf("替换后的字符串为:");
  107. dislist(str);
  108. }
  109. void TH_1(){
  110. char n[]={"0"};
  111. cin>>n;
  112. createlist(t,n);
  113. int i=3,j=3;
  114. TH(s,i,j,t);
  115. }
  116. void TH_2(){
  117. char m[maxsize],n[maxsize];
  118. scanf("%s%s",m,n);
  119. char *p;
  120. p=strstr(s.a,m);
  121. if(p){
  122. int i=p-s.a;
  123. int j=strlen(m);
  124. e_list h;h.size=strlen(n);
  125. for(int i=0;i<strlen(n);i++)
  126. h.a[i]=n[i];
  127. TH(s,i+1,j,h);
  128. }
  129. else printf("NOT Find!");
  130. }
  131. bool TQCR(e_list &s,int n,int m,int i){
  132. e_list s1,s2,str;
  133. str.size=0;
  134. int l=0,j;
  135. if(n+m>s.size)return false;
  136. for(int j=n-1;j<n+m-1;j++)
  137. s2.a[l++]=s.a[j];
  138. s2.size=l;
  139. for(j=0;j<i-1;j++)
  140. str.a[j]=s.a[j];
  141. for(j=0;j<s2.size;j++)
  142. str.a[j+i-1]=s2.a[j];
  143. for(j=i-1;j<s.size;j++)
  144. str.a[j+s2.size]=s.a[j];
  145. str.size=s.size+s2.size;
  146. for(j=0;j<str.size;j++)
  147. s.a[j]=str.a[j];
  148. s.size=str.size;
  149. }
  150. void caidan(){
  151. printf("********************文本编辑*******************************\n");
  152. printf("* 1.全部字母个数 *\n");
  153. printf("* 2.数字个数 *\n");
  154. printf("* 3.空格个数 *\n");
  155. printf("* 4.文章总个数 *\n");
  156. printf("* 5.输出删除某一字符串后的文章 *\n");
  157. printf("* 6.查找替换指定位置开始的指定长度的字符串 *\n");
  158. printf("* 7.查找替换指定的字符串 *\n");
  159. printf("* 8.在指定位置提取字符串在指定位置插入 *\n");
  160. printf("* 9.退出编辑 *\n");
  161. printf("***********************************************************\n");
  162. int ch,i=1;
  163. char n[]={"0"};e_list h;
  164. while(i){
  165. printf("\n请输入您所需要模块:");
  166. scanf("%d",&ch);
  167. switch(ch){
  168. case 1:printf("全部字母个数:");zimunum(s);break;
  169. case 2:printf("数字个数:");shuzinum(s);break;
  170. case 3:printf("空格个数:");konggenum(s);break;
  171. case 4:printf("文章总个数:");zongzinum(s);break;
  172. case 5:printf("删除某一字符串后的文章:");printf("\n请输入您要删除的字符串:");
  173. cin>>n;createlist(h,n);delestr(s,h);break;
  174. case 6:printf("查找替换指定位置开始的指定长度的字符串:");TH_1();break;
  175. case 7:printf("查找替换指定的字符串:");TH_2();break;
  176. case 8:printf("在指定位置提取字符串在指定位置插入");
  177. int i,j,k;cin>>i>>j>>k;TQCR(s,i,j,k);dislist(s);break;
  178. case 9:printf("退出编辑\n");exit(0);break;
  179. }
  180. }
  181. }
  182. int main(){
  183. char wenben[]={"abcdefghijklmnopqrstuvwxyz"};
  184. createlist(s,wenben);
  185. caidan();
  186. return 0;
  187. }