C語言數(shù)據(jù)結(jié)構(gòu)中定位函數(shù)Index的使用方法
數(shù)據(jù)結(jié)構(gòu)中定位函數(shù)Index的使用方法
實(shí)現(xiàn)代碼:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 40 //最大字符串
typedef int Status;
typedef char SString[MAXSIZE+1];
//此處聲明的SString[maxsize+1]雖是數(shù)組,在SubString中作為指針使用,
//因位是指針,SString[0]存放實(shí)際數(shù)組的地址,使用時(shí)不用加*或&,直接傳入數(shù)組的值
/*******************************聲明部分****************************************/
Status StrAssign(SString T,char *chars);
//生成一個(gè)其值等于chars的串T 第一個(gè)元素為字符串長(zhǎng)度
int StrLength(SString S);
//操作結(jié)果:返回S的元素個(gè)數(shù),成為串的長(zhǎng)度
int StrCompare(SString S,SString T);
//操作結(jié)果:若S>T,則返回值>0;若S = T,則返回值 =0;若S<T,則返回值<0
Status SubString(SString Sub, SString T,int pos,int len);
//用Sub返回串T的第pos個(gè)字符起長(zhǎng)度為len的子串
int Index(SString S,SString T,int pos);
//若主串S中存在和串T值相同的子串,則返回它在主串中第pos個(gè)字符之后第一次出現(xiàn)的位置;否則函數(shù)值為0
/*******************************函數(shù)部分****************************************/
Status StrAssign(SString T,char *chars)
{
int i,ct;
for(i = 0;i <= MAXSIZE; i++)
T[i] = '\0'; //全部清零
T[0] = strlen(chars);
for(ct = 1;*chars != '\0';ct++,chars++){
T[ct] = *chars;
}
return OK;
}
int StrLength(SString S)
{
return S[0];
}
int StrCompare(SString S,SString T)
{
int cnt = 1;
while(cnt <= S[0] && cnt <= T[0]){ //非空前提下
if(S[cnt] == T[cnt]){ //相等
cnt++;
}
else{ //不相等
return S[cnt] - T[cnt];
}
}
return S[0]-T[0];
}
Status SubString(SString Sub, SString T,int pos,int len)
{
if(pos<1 || pos>T[0] || len<0 || len>T[0]-pos+1)
return ERROR;
int ct,cnt;
for(ct = 1,cnt = pos;cnt <= len+pos;ct++,cnt++){
Sub[ct]=T[cnt];
}
Sub[0] = len+1;
return OK;
}
int Index(SString S,SString T,int pos)
{
SString Sub;
int i = pos;
if(pos > 0){
int n = StrLength(S),m = StrLength(T);
while( i<= n-m+1){
SubString(Sub,S,i,m-1);
if(StrCompare(Sub,T)==0)
return i;
else
i++;
}
}//if
printf("不存在\n");
return 0; //S中不存在與T相等的子串
}//Index
/*******************************主函數(shù)部分**************************************/
int main()
{
char *chars1 = "abcdefhg";
char *chars2 = "defhg";
SString S,T;
StrAssign(S,chars1);
StrAssign(T,chars2);
int ANSWER = Index(S,T,1);
printf("找到子串T在S中的位置 = %d\n",ANSWER);
return 0;
}
實(shí)現(xiàn)效果:

如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- C語言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程
- C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計(jì)
- 使用C語言構(gòu)建基本的二叉樹數(shù)據(jù)結(jié)構(gòu)
- C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實(shí)現(xiàn)方法
- C語言 數(shù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼
- C語言數(shù)據(jù)結(jié)構(gòu)樹的雙親表示法實(shí)例詳解
- C語言數(shù)據(jù)結(jié)構(gòu)之?dāng)U展字符詳解
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C++使用TinyXML2實(shí)現(xiàn)解析和生成XML數(shù)據(jù)
TinyXML2是一個(gè)輕量級(jí)的、開源的C++庫(kù),專門用于解析和生成XML文檔,本文主要為大家介紹了如何使用TinyXML2實(shí)現(xiàn)解析和生成XML數(shù)據(jù),需要的可以參考下2024-04-04
淺談C++類型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)
下面小編就為大家?guī)硪黄獪\談C++類型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
C語言實(shí)現(xiàn)線索二叉樹的前中后創(chuàng)建和遍歷詳解
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)線索二叉樹的前中后創(chuàng)建和遍歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法
這篇文章主要介紹了MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法,需要的朋友可以參考下2014-07-07
C++ BloomFilter布隆過濾器應(yīng)用及概念詳解
布隆過濾器是由布隆(Burton Howard Bloom)在1970年提出的 一種緊湊型的、比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu),特點(diǎn)是高效地插入和查詢,可以用來告訴你 “某樣?xùn)|西一定不存在或者可能存在”,它是用多個(gè)哈希函數(shù),將一個(gè)數(shù)據(jù)映射到位圖結(jié)構(gòu)中2023-03-03

