//适合懂得指针操作的人看
#include<stdio.h>
#include<string.h>
int findIndex(char* par_str, char* child_str )
{
short i,j=0;
char* temp = child_str;
for(i=0; i<strlen(par_str); i++)
{
if(*temp == *(par_str+i))
{
temp++;
if( ++j == strlen(child_str))
return i-j+1;
}
else
temp = child_str;
}
return -1;
}
int main(void)
{
char par_arr[] = "abc 123 cxy ppppp";
char child_str[] = "123";
int index;
index = findIndex(par_arr, child_str);
printf("index= %d", index);
return 0;
}
#include<iostream> using namespace std; int search(string s[],int low,int high,string x) { if(x == "") return -1; while(low <= high) { int mid = (high-low)/2+low; int t = mid; while(s[t] == "" && t<=high) { t++; } if(s[t] == x) return t; else if(s[t] < x) low = t+1; else high = mid-1; } return -1; } int main() { string s[13] = { "at", "", "", "", "ball", "", "", "car", "", "", "dad", "", "" }; cout<<search(s, 0, 12, "ball")<<endl; return 0; }
二分查找
public class BinSearch { public static boolean isF=false; public static int result=-1; public static void main(String[] args) { String[] str = { "at", "", "", "", "ball", "", "", "car", "", "", "dad", "", "" }; indexOfString(str, "ball", 0, str.length-1); System.out.println(result); } public static void indexOfString(String[] str,String s,int left,int right) { if(isF) return; String mid=str[(left+right)/2]; if (mid.equals("")) { indexOfString(str, s, left, right-1); indexOfString(str, s,left+1, right); }else if (mid.compareTo(s)>0) { indexOfString(str, s, left, (left+right)/2-1); } else if(mid.compareTo(s)<0){ indexOfString(str, s,(left+right)/2+1, right); } else { isF=true; result=(left+right)/2; return; } return; } }
public static int getIndex(String[] strs, String str){if (strs == null || strs.length == 0 || str == null) {return -1;}int start = -1;int end = strs.length;int i = 0;while(start + 1 < end){int mid = start + (end - start) / 2; //此写法和防止相加越界if(strs[mid] != null){
if (strs[mid].compareTo(str) < 0) {
start = mid;
}else{end = mid;}}else{
i = mid; //用i记录当前mid位置,然后往左边找第一个不为null的字符while(strs[i] == null && --i >= start+1);
if (i < start+1 || strs[i].compareTo(str) < 0) {
start = mid;
}else{end = i;}
}
}if (start+1 >= strs.length || !strs[start+1].equals(str)) {return -1;}return start+1;
}