溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用C語(yǔ)言怎么實(shí)現(xiàn)一個(gè)模糊搜索功能

發(fā)布時(shí)間:2021-05-17 17:40:28 來源:億速云 閱讀:493 作者:Leah 欄目:編程語(yǔ)言

使用C語(yǔ)言怎么實(shí)現(xiàn)一個(gè)模糊搜索功能?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

//模糊搜索判斷是否符合篩選條件
int result_mohu(const gchar* key,char* str)
{
  typedef struct
  {
    char son[11];
  }Element;
  int i,j,k=0,l=0,m=0;
  //f=1為符合篩選條件
  int f=0;
 //N1為str的長(zhǎng)度 N2為str連續(xù)子串的個(gè)數(shù)
 int N1=0,N2=0;
 N1=strlen(str);
 /*計(jì)算連續(xù)子串的個(gè)數(shù)*/
 for(i=1;i<=N1;i++)
  N2+=i;
  /*計(jì)算連續(xù)子串的個(gè)數(shù)*/
  //i控制子字符串的長(zhǎng)度
  //j控制賦值
  //k控制新的線性結(jié)構(gòu)b的下標(biāo)
  //l控制子數(shù)組的首項(xiàng)在原數(shù)組中的位置
  //m控制即將用作賦值的str的下標(biāo)
  Element *b=malloc(sizeof(Element)*N2);
  for(i=1;i<=N1;i++)
  {
    l=0;
    /*while循環(huán)內(nèi)為給一個(gè)子字符串?dāng)?shù)組賦值*/
    while(1)
      {
      m=l;
      for(j=0;j<i;j++)
      {
        b[k].son[j]=str[m];
        m++;
      }
      l++;
      k++;
      if(m==N1)
        break;
      }
  }
  //挨個(gè)比對(duì)
  for(i=0;i<N2;i++)
    if(strcmp(key,b[i].son)==0)
    {
      f=1;
      break;
    }
  free(b);
  return f;
}

若返回值f=1則表示符合篩選條件,即查詢對(duì)象含有包含關(guān)鍵詞的片段。最為關(guān)鍵的循環(huán)就是按照子字符串的長(zhǎng)度從1到N1(查詢對(duì)象字符串的長(zhǎng)度)。

以下片段為遍歷代碼,可看可不看,核心算法都在上面。注:博主實(shí)現(xiàn)模糊搜索的環(huán)境是linux系統(tǒng)下的gtk開發(fā)。

//按學(xué)號(hào)查找界面的<查找>
void on_button_idsearch_clicked(GtkObject* widget,gpointer user_data)
{
 int i;
 int f=0;
 GtkTreeIter iter;
 //獲取搜索關(guān)鍵字
 const gchar* keywords = gtk_entry_get_text(entry_search_id);
 gtk_list_store_clear(liststore2);
 for(i=0;i<size1;i++)
  if(result_mohu(keywords,stu1[i].id)==1)
   {    
    gtk_list_store_append(liststore2,&iter);
    gtk_list_store_set(liststore2,&iter,0,stu1[i].no,-1);
    gtk_list_store_set(liststore2,&iter,1,stu1[i].id,-1);
    gtk_list_store_set(liststore2,&iter,2,stu1[i].name,-1);
    gtk_list_store_set(liststore2,&iter,3,stu1[i].math,-1);
    gtk_list_store_set(liststore2,&iter,4,stu1[i].c_language,-1);
    gtk_list_store_set(liststore2,&iter,5,stu1[i].daolun,-1);
    gtk_list_store_set(liststore2,&iter,6,stu1[i].english,-1);
    gtk_list_store_set(liststore2,&iter,7,stu1[i].pe,-1);
    gtk_list_store_set(liststore2,&iter,8,stu1[i].history,-1);
    gtk_list_store_set(liststore2,&iter,9,stu1[i].daoyuan,-1);
    gtk_list_store_set(liststore2,&iter,10,stu1[i].banzhuren,-1);
    gtk_list_store_set(liststore2,&iter,11,stu1[i].score_classmate,-1);
    gtk_list_store_set(liststore2,&iter,12,stu1[i].sum,-1);
    f=1;
   }
 if(f==0)
  gtk_widget_show(GTK_WIDGET(window_noresult));
}

C語(yǔ)言是什么

C語(yǔ)言是一門面向過程的、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開發(fā),使用C語(yǔ)言可以以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI