C语言字符串查找函数

  1 #include <string.h>
  2 #include <stdio.h>
  3 
  4 char * string_search(char long_str[], char short_str[])
  5 {//author: emanlee
  6     char *pl, *qs;
  7     long is_identical, long_length, short_length;
  8     long position, ii;
  9     
 10     long_length=strlen(long_str);
 11     short_length=strlen(short_str);
 12     
 13     if (long_length<short_length)
 14     {
 15         printf("ERROR\n");
 16         return NULL;
 17     }
 18     
 19     for (position=0; position<long_length-short_length+1; position++)
 20     {
 21         pl=long_str+position;
 22         qs=short_str;
 23         is_identical=1;
 24         
 25         for (ii=0; ii<short_length; ii++)
 26         {
 27             if (*pl != *qs)
 28             {
 29                 is_identical=0;
 30                 break;
 31             }
 32             
 33             pl++;
 34             qs++;
 35         }
 36         
 37         if (is_identical==1)
 38         {
 39             return long_str+position;    
 40         }
 41         
 42         
 43     }
 44 
 45     return NULL;
 46     
 47     
 48 }
 49 
 50 
 51 char * string_search_postion(char long_str[], char short_str[], long start_position)
 52 {//author: emanlee
 53     char *pl, *qs;
 54     long is_identical, long_length, short_length;
 55     long position, ii;
 56     
 57     long_length=strlen(long_str);
 58     short_length=strlen(short_str);
 59     
 60     if (long_length<short_length)
 61     {
 62         printf("ERROR\n");
 63         return NULL;
 64     }
 65     
 66     for (position=start_position; position<long_length-short_length+1; position++)
 67     {
 68         pl=long_str+position;
 69         qs=short_str;
 70         is_identical=1;
 71         
 72         for (ii=0; ii<short_length; ii++)
 73         {
 74             if (*pl != *qs)
 75             {
 76                 is_identical=0;
 77                 break;
 78             }
 79             
 80             pl++;
 81             qs++;
 82         }
 83         
 84         if (is_identical==1)
 85         {
 86             return long_str+position;    
 87         }
 88         
 89         
 90     }
 91     
 92     return NULL;
 93     
 94     
 95 }
 96 
 97 
 98 
 99 char * string_search_pointer_postion(char long_str[], char short_str[], char * start_position)
100 {//author: emanlee
101     char *pl, *qs;
102     long is_identical, long_length, short_length;
103     long position, ii;
104     
105     long_length=strlen(long_str);
106     short_length=strlen(short_str);
107     
108     if (long_length<short_length)
109     {
110         printf("ERROR\n");
111         return NULL;
112     }
113     
114     for (position=(long)(start_position-long_str); position<long_length-short_length+1; position++)
115     {
116         pl=long_str+position;
117         qs=short_str;
118         is_identical=1;
119         
120         for (ii=0; ii<short_length; ii++)
121         {
122             if (*pl != *qs)
123             {
124                 is_identical=0;
125                 break;
126             }
127             
128             pl++;
129             qs++;
130         }
131         
132         if (is_identical==1)
133         {
134             return long_str+position;    
135         }
136         
137         
138     }
139     
140     return NULL;
141     
142     
143 }
144 
145 
146 void main()
147 {
148     char a[1000]="12345678901234567890";
149     char b[1000]="456";
150     char *p;
151 
152     p=string_search(a,b);
153 
154     printf("%s\n", string_search(a,b));
155     printf("%s\n", string_search_postion(a,b,9));
156     printf("%s\n", string_search_pointer_postion(a,b,p+1));
157 
158 }

 

相关文章

文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...
文章浏览阅读1.8k次,点赞11次,收藏37次。因为自己对决策树...
文章浏览阅读492次。C++ 设计模式之策略模式
文章浏览阅读683次。我也算是个C++的小白,对于C++中的谓语我...
文章浏览阅读225次。又看了一遍操作符的东西,感觉之前对操作...