string .c
上传用户:bjtelijie
上传日期:2010-01-01
资源大小:87k
文件大小:3k
源码类别:

数学计算

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4. typedef struct node
  5. {
  6. char Data[80];
  7. struct node *Next;
  8. }nodetype;
  9. typedef struct head
  10. {
  11. int Num; /*行号*/
  12. int Len; /*改行字符的个数*/
  13. nodetype *Next;
  14. }headtype;
  15. headtype Head[MAX];
  16. void Initial();
  17. int MenuSelect();
  18. void EnterData();
  19. void DeleteLine();
  20. void List();
  21. void ClearBuffer();
  22. main()
  23. {
  24. char choice;
  25. Initial();
  26. while(1)
  27. {
  28. choice = MenuSelect();
  29. switch (choice)
  30. {
  31. case 1:EnterData();
  32. break;
  33. case 2:DeleteLine();
  34. break;
  35. case 3:List();
  36. break;
  37. case 4:exit(0);
  38. }
  39. }
  40. }
  41. void ClearBuffer()
  42. {
  43. while(getchar()!='n');
  44. }
  45. void Initial()
  46. {
  47. int i;
  48. for(i=0;i<MAX;i++)
  49. {
  50. Head[i].Len=0;
  51. }
  52. }
  53. int MenuSelect()
  54. {
  55. int i;
  56. i=0;
  57. printf(" 1. Entern");
  58. printf(" 2. Deleten");
  59. printf(" 3. Listn");
  60. printf(" 4. Exitn");
  61. while(i<=0||i>4)
  62. {
  63. printf("请输入菜单选择号n");
  64. scanf("%d",&i);
  65. ClearBuffer();
  66. }
  67. return(i);
  68. }
  69. void EnterData()
  70. {
  71. nodetype *p,*find();
  72. int i,j,m,LineNumber,k;
  73. char StrBuffer[100];
  74. while(1)
  75. {
  76. printf("输入数据要插入的行号(0~100):n");
  77. scanf("%d",&LineNumber);
  78. ClearBuffer();
  79. if(LineNumber<0||LineNumber>=MAX)
  80. return;
  81. printf("请输入要插入的数据,以@作为结束符号n");
  82. i=LineNumber;
  83. Head[i].Num=LineNumber;
  84. Head[i].Next=(nodetype *)malloc(sizeof(nodetype));
  85. p=Head[i].Next;
  86. m=1;
  87. j=-1;
  88. StrBuffer[0]=0;
  89. k=0;
  90. do
  91. {
  92. j++;
  93. if(!StrBuffer[k])
  94. {
  95. scanf("%s",StrBuffer);
  96. k=0;
  97. }
  98. if(j>=80*m)
  99. {
  100. m++;
  101. p->Next=(nodetype *)malloc(sizeof(nodetype));
  102. p=p->Next;
  103. }
  104. p->Data[j%80] = StrBuffer[k++];
  105. }while(p->Data[j%80]!='@');
  106. Head[i].Len = j;
  107. }
  108. }
  109. void DeleteLine()
  110. {
  111. nodetype *p,*q;
  112. int i,j,m,LineNumber;
  113. while(1)
  114. {
  115. printf("输入要删除的行号(0~100):n");
  116. scanf("%d",&LineNumber);
  117. if(LineNumber<0||LineNumber>=MAX)
  118. return;
  119. i = LineNumber;
  120. p=Head[i].Next;
  121. m=0;
  122. if(Head[i].Len>0)
  123. {
  124. m=(Head[i].Len-1)/80+1; /*查找改行用到几个链表结点*/
  125. }
  126. for(j=0;j<m;j++)
  127. {
  128. q=p->Next;
  129. free(p);
  130. p=q;
  131. }
  132. Head[i].Len=0;
  133. Head[i].Num=0;
  134. }
  135. }
  136. void List()
  137. {
  138. nodetype *p;
  139. int i,j,m,n;
  140. for(i=0;i<MAX;i++)
  141. {
  142. if(Head[i].Len>0)
  143. {
  144. printf("第%d行有数据,它们是:n",Head[i].Num);
  145. n=Head[i].Len;
  146. m=1;
  147. p=Head[i].Next;
  148. for(j=0;j<n;j++)
  149. if(j>=80*m)
  150. {
  151. p=p->Next;
  152. m++;
  153. }
  154. else
  155. printf("%c",p->Data[j%80]);
  156. printf("n");
  157. }
  158. }
  159. printf("n");
  160. }