首页 > 试题广场 >

给定一个已经排好序的字符串数组,空字符串散布在该数组中,编写

[问答题]
给定一个已经排好序的字符串数组,空字符串散布在该数组中,编写一个函数寻找一个 给定字符串的位置。
//适合懂得指针操作的人看
#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;
}

发表于 2016-01-26 16:51:01 回复(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;
}

发表于 2016-04-26 17:20:55 回复(0)
def find_string(str_target,string):
    str_list = string.split(' ')
    for i in range(len(str_list)):
        if str_list[i] ==  str_target:
             print("该字符串的位置为 %d" % (i+1))
        

发表于 2019-08-03 15:47:04 回复(1)

二分查找

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;
    }
}

图片说明

发表于 2020-09-08 20:15:42 回复(0)
public getStringLocation(){
    public int getLocation(String[] s, String target){
        int Location = -1;
        for (int i = 0; i<s.length(); ++i){
            if(s[i] == " ") continue;
            if(s.equals(target)){
                Location = i;
                break;
            }
        }
        return Location;
    }
}
发表于 2021-09-03 11:02:55 回复(0)
int serachKeyValue(string s[],string x){
if(x=""){
return -1;
}
int low=0;int high=s.lenth-1;
while(low<length){
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"};
}
printf("index=%d",index);
}

}
发表于 2018-01-26 14:39:53 回复(0)
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;

}


发表于 2016-10-16 18:22:10 回复(0)
int ret(string &st,string aim)
{
 if(st.find(aim.c_str()) != string::npos)
 {
 return st.find(aim.c_str());
 }
}
发表于 2016-08-24 20:08:02 回复(0)
import java.io.*;
class test{


public static void main (String[] args) {

    String ts="abc 123 cxy ppppp";

    char str[]= ts.toCharArray();
    String childStr="abc";
    System.out.println("string loction start index :"+ findIndex(str,childStr)+"");


}

    public  static int findIndex( char pStr[],String childStr) {
        int clenth = childStr.length();
        String tStr="";
        int j=0;
        for (int i = 0; i < pStr.length; i++) {

            tStr+=pStr[i];
            ++j;
            System.out.println("tStr:"+tStr+j+"");
            if(j==clenth)
            {
               if( tStr.equals(childStr))
               {
                   return i-j+1;
               }
                j=0;
                tStr="";

            }

        }
        return -1;
    }
}
发表于 2016-03-14 10:26:15 回复(0)
int find_str_pos(char *str,char *str1)
{
if (str==NULL)
{
return -1;
}
if (str1==NULL)
{
cout<<"对比字符串为空";
return -2;
}
int flag=0;
int i=0,j=0;
while(str[i]!=0)
{
while(str[i]==str1[j])
{
i++;
   j++;
if (str1[j]==NULL)
{
return i-j;
}
i++;
}  
return -1; 

}
发表于 2015-11-10 20:05:05 回复(0)