# 数据结构之串和数组

在应用程序中使用最频繁的类型是字符串，尽管C#中已经有了String类型，废话不多说了。

实现代码如下:

1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 串和数组
6{
7    class Program
8    {
9        public class StringDS
10
11           //字符数组
12            private char[] data;
13            //索引器
14            public char this[int index]
15            {
16                get
17                {
18                    return data[index];
19                }

20            }

21            //构造器
22            public StringDS(char[] arr)
23            {
24                data=new char[arr.Length];
25                for (int i = 0; i < arr.Length; i++)
26                {
27                    data[i] = arr[i];
28                }

29            }

30            //构造器
31            public StringDS(StringDS s)
32            {
33                for (int i = 0; i < s.data.Length; i++)
34                {
35                    data[i] = s.data[i];
36                }

37            }

38            //构造器
39            public StringDS(int len)
40
41               char[] arr=new char[len];
42               data = arr;
43            }

44            //求串长
45            public int GetLength()
46            {
47                return data.Length;
48            }

49            //串比较
50            public int Compare(StringDS s)
51            {
52                int len = ((this.GetLength() <= s.GetLength()) ? this.GetLength() : s.GetLength());
53                int i = 0;
54                for (i = 0; i < len; i++)
55                {
56                    if (this[i] != s.data[i])
57                    {
58                        break;
59                    }

60                }

61                if (i < len)
62                {
63                    if (this[i] < s.data[i])
64                    {
65                        return -1;
66                    }

67                    else if (this[i] > s.data[i])
68                    {
69                        return 1;
70                    }

71                }

72                else  if(this.GetLength()==s.GetLength())
73                {
74                    return 0;
75                }

76                else if (this.GetLength() < s.GetLength())
77                {
78                    return -1;
79                }

80                return 1;
81            }

82
83            //求子串
84            public StringDS SubString(int index, int len)
85            {
86                if ((index < 0|| (index > this.GetLength() - 1|| (len < 0|| (len > this.GetLength() - index))
87                {
88                    Console.WriteLine("位置错误！");
89                    return null;
90                }

91                StringDS s = new StringDS(len);
92                for (int i = 0; i < len; ++i)
93
94                    s.data[i]=this[i+index-1];
95                }

96                return s;
97
98            }

99            //串连接
100            public StringDS Concat(StringDS s)
101            {
102                StringDS s1 = new StringDS(this.GetLength()+s.GetLength());
103                for (int i = 0; i < this.GetLength(); ++i)
104
105                   s1.data[i]=this[i];
106                }

107                for (int j = 0; j < s.GetLength(); j++)
108
109
110                s1.data[this.GetLength()+j]=s[j];
111
112                }

113                return s1;
114            }

115            //串插入
116            public StringDS Insert(int index, StringDS s)
117            {
118                int len = s.GetLength();
119                int len2 = len + this.GetLength();
120                StringDS s1 = new StringDS(len2);
121                if (index < 0 || index > this.GetLength() - 1)
122                {
123                    Console.WriteLine("位置错误！");
124                    return null;
125                }

126                for (int i = 0; i < index ; ++i)
127                {
128                    s1.data[i] = this[i];
129                }

130                for (int i = index; i < index + len; ++i)
131                {
132                    s1.data[i] = s[i - index];
133                }

134                for (int i = index + len; i < len2; i++)
135                {
136                    s1.data[i] = this[i - len];
137                }

138                return s1;
139            }

140            //串删除
141            public StringDS Delete(int index,int len)
142            {
143                if ((index < 0|| (index > this.GetLength() - 1|| (len < 0|| (len > this.GetLength() - index))
144                {
145                    Console.WriteLine("位置错误！");
146                    return null;
147                }

148                StringDS s = new StringDS(this.GetLength()-len);
149                for (int i = 0; i < index; ++i)
150                {
151                    s.data[i] = this[i];
152                }

153                for (int i = index + len; i < this.GetLength(); ++i)
154                {
155                    s.data[i] = this[i];
156                }

157                return s;
158            }

159            //串定位
160            public int Index(StringDS s)
161            {
162                if (this.GetLength() < s.GetLength())
163                {
164                    Console.WriteLine("这里没有"+s+"");
165                    return -1;
166
167                }

168                int i = 0;
169                int len = this.GetLength() - s.GetLength();
170                while(i<len)
171                {
172                    if (this.Compare(s) == 0)
173                    {
174                        break;
175                    }

176
177                }

178
179                if(i<=len)
180                {
181                    return i;
182                }

183                return -1;
184            }

185
186        }

187        static void Main(string[] args)
188        {
189            char[] f = new char[] {'a','b','f','s'};
190            char[] m = new char[] {'d','v','e','k'};
191            StringDS str1 = new StringDS(f);
192            StringDS str2 = new StringDS(m);
193            str1.Insert(3, str2);
194           Console.WriteLine(str1.Index(str2));
195           str1.Delete(3,1);
196
197        }

198    }

199}

200
posted on 2009-03-13 22:06  甲乙丙丁  阅读(498)  评论(0编辑  收藏  举报