1. #include<stdio.h>
    2. #define MaxSize 100 //字符串最大长度
    3. typedef struct{
    4. char ch[MaxSize];
    5. int length;
    6. }SqString;
    7. /**********************************************/
    8. //生成串
    9. void StrAssign(SqString & s,char cstr[]);
    10. //销毁串
    11. void DestroyStr(SqString & s);
    12. //串的复制
    13. void StrCopy(SqString & s,SqString t);
    14. //判断串相等
    15. bool StrEqual(SqString & s,SqString t);
    16. //求串长
    17. int StrLength(SqString & s);
    18. //串的连接
    19. SqString Concat(SqString s,SqString t);
    20. //求子串
    21. SqString SubStr(SqString s,int i,int j);
    22. //子串的插入
    23. SqString SubStr(SqString s1,int i,SqString s2);
    24. //子串的删除
    25. SqString DelStr(SqString s,int i,int j);
    26. //子串的替换
    27. SqString ReqStr(SqString s,int i,int j,SqString t);
    28. //输出串
    29. void DispStr(SqString s);
    30. /**********************************************/
    31. //生成串
    32. void StrAssign(SqString & s,char cstr[]){
    33. int i = 0;
    34. while(cstr[i] != '\0'){
    35. s.ch[i] = cstr[i];
    36. i++;
    37. }
    38. s.length = i;
    39. }
    40. //销毁串
    41. void DestroyStr(SqString & s){
    42. }
    43. //串的复制
    44. void StrCopy(SqString & s,SqString t){
    45. int i;
    46. for(i = 0;i < t.length;i++){
    47. s.ch[i] = t.ch[i];
    48. }
    49. s.length = t.length;
    50. }
    51. //判断串相等
    52. int StrEqual(SqString & s,SqString t){
    53. int IsSame = 1;
    54. int i;
    55. if(s.length != t.length){
    56. IsSame = 0;
    57. }else{
    58. for (i = 0; i < s.length; i++)
    59. {
    60. if(s.ch[i] != t.ch[i]){
    61. IsSame = 0;
    62. break;
    63. }
    64. }
    65. }
    66. return IsSame;
    67. }
    68. //求串长
    69. int StrLength(SqString & s){
    70. return s.length;
    71. }
    72. //串的连接
    73. SqString Concat(SqString s,SqString t){
    74. SqString str;
    75. int i;
    76. str.length = s.length + t.length;
    77. for (i = 0; i < s.length; i++)
    78. {
    79. str.ch[i] = s.ch[i];
    80. }
    81. for (i = 0; i < t.length; i++)
    82. {
    83. str.ch[s.length + i] = t.ch[i];
    84. }
    85. return str;
    86. }
    87. //求子串
    88. SqString SubStr(SqString s,int i,int j){
    89. int k;
    90. SqString str;
    91. str.length = 0;
    92. if(i<=0 || i>s.length || j<0 || i+j-1 > s.length){
    93. return str;
    94. }
    95. for (k = i-1; i < i+j-1; k++){
    96. str.ch[k-i+1] = s.ch[k];
    97. }
    98. str.length = j;
    99. return str;
    100. }
    101. //子串的插入
    102. SqString SubStr(SqString s1,int i,SqString s2){
    103. int j;
    104. SqString str;
    105. str.length = 0;
    106. if(i<=0 || i>s1.length + 1){
    107. return str;
    108. }
    109. for (j = 0; j < i-1; j++){
    110. str.ch[j] = s1.ch[j];
    111. }
    112. for (j = 0; j < s2.length; j++)
    113. {
    114. str.ch[i+j-1] = s2.ch[j];
    115. }
    116. for(j = i-1;j < s1.length;j++){
    117. str.ch[j + s2.length] = s2.ch[j];
    118. }
    119. str.length = s1.length + s2.length;
    120. return str;
    121. }
    122. //子串的删除
    123. SqString DelStr(SqString s,int i,int j){
    124. int k;
    125. SqString str;
    126. str.length = 0;
    127. if(i<=0 || i>s.length || j<0 || i+j-1 > s.length){
    128. return str;
    129. }
    130. for(k = 0;k < i-1; k++){
    131. str.ch[k] = s.ch[k];
    132. }
    133. for(k = i + j - 1;k < s.length; k++){
    134. str.ch[k - j] = s.ch[k];
    135. }
    136. return str;
    137. }
    138. //子串的替换
    139. SqString ReqStr(SqString s,int i,int j,SqString t){
    140. int k;
    141. SqString str;
    142. str.length = 0;
    143. if(i<=0 || i>s.length || j<0 || i+j-1 > s.length){
    144. return str;
    145. }
    146. for(k = 0;k < i-1; k++){
    147. str.ch[k] = s.ch[k];
    148. }
    149. for(k = 0;k < t.length; k++){
    150. str.ch[i + k - 1] = s.ch[k];
    151. }
    152. for(k = i + j - 1;k < s.length; k++){
    153. str.ch[t.length + k - j] = s.ch[k];
    154. }
    155. str.length = s.length - j + t.length;
    156. return str;
    157. }
    158. //输出串
    159. void DispStr(SqString s){
    160. int i;
    161. if(s.length > 0){
    162. for(i = 0;i<s.length;i++){
    163. printf("%c\t",s.ch[0]);
    164. }
    165. printf("\n");
    166. }
    167. }