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 }