C語言數(shù)據(jù)結(jié)構(gòu)中定位函數(shù)Index的使用方法
更新時(shí)間:2017年10月31日 09:32:03 作者:Vit_rose
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)中定位函數(shù)Index的使用方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下
數(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è)元素為字符串長度 int StrLength(SString S); //操作結(jié)果:返回S的元素個(gè)數(shù),成為串的長度 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è)字符起長度為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ū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:
- 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ù)組:字符和字符串、字符數(shù)組的關(guān)聯(lián)和區(qū)別
字符串是一種重要的數(shù)據(jù)類型,但是c語言并沒有顯示的字符串?dāng)?shù)據(jù)類型,因?yàn)樽址宰址A康男问匠霈F(xiàn)或者存儲(chǔ)于字符數(shù)組中。在C++標(biāo)準(zhǔn)模板庫(STL)中提供了string類,實(shí)現(xiàn)了對字符串的封裝。2022-12-12Linux中使用C語言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例
這篇文章主要介紹了Linux中使用C語言實(shí)現(xiàn)基于UDP協(xié)議的socket通信示例,服務(wù)器端與客戶端的功能都非?;A(chǔ),需要的朋友可以參考下2016-03-03C語言單循環(huán)鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
這篇文章主要介紹了C語言單循環(huán)鏈表的表示與實(shí)現(xiàn),對于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的朋友來說很有參考借鑒價(jià)值,需要的朋友可以參考下2014-07-07C++超詳細(xì)實(shí)現(xiàn)堆和堆排序過像
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將通過圖片詳細(xì)介紹堆排序,需要的可以參考一下2022-06-06詳解約瑟夫環(huán)問題及其相關(guān)的C語言算法實(shí)現(xiàn)
這篇文章主要介紹了詳解約瑟夫環(huán)問題及其相關(guān)的C語言算法實(shí)現(xiàn),也是ACM當(dāng)中經(jīng)常會(huì)引用到的基礎(chǔ)題目,文中共介紹了三種C語言解答,需要的朋友可以參考下2015-08-08