C语言数据结构中定位函数Index的使用方法

 更新时间:2017年10月31日 09:32:03   作者:Vit_rose  
这篇文章主要介绍了C语言数据结构中定位函数Index的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下

数据结构中定位函数Index的使用方法

实现代码:

#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]虽是数组,在SubString中作为指针使用,
//因位是指针,SString[0]存放实际数组的地址,使用时不用加*或&,直接传入数组的值
/*******************************声明部分****************************************/
Status StrAssign(SString T,char *chars);
//生成一个其值等于chars的串T 第一个元素为字符串长度
int StrLength(SString S);
//操作结果:返回S的元素个数,成为串的长度
int StrCompare(SString S,SString T);
//操作结果:若S>T,则返回值>0;若S = T,则返回值 =0;若S<T,则返回值<0
Status SubString(SString Sub, SString T,int pos,int len);
//用Sub返回串T的第pos个字符起长度为len的子串
int Index(SString S,SString T,int pos);
//若主串S中存在和串T值相同的子串,则返回它在主串中第pos个字符之后第一次出现的位置;否则函数值为0
/*******************************函数部分****************************************/
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

/*******************************主函数部分**************************************/
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;
}

实现效果:

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 使用VS2010创建MFC ActiveX工程项目

    使用VS2010创建MFC ActiveX工程项目

    VS2010开发ActiveX有两种方法,分别是MFC和ATL。MFC开过起来比较简单,但是最终生成的文件比较大,ATL是专门用来开发ActiveX的,但是相对比较难,必须知道很多原理机制和API。咱先从MFC开发ActiveX开始吧。
    2015-06-06
  • C语言利用system调用系统命令行详情

    C语言利用system调用系统命令行详情

    这篇文章主要介绍了C语言利用system调用系统命令行详情,system就是调用系统命令行,输入为字符串,然后把这个字符串输出给命令行,让命令行执行。下文的具体内容,需要的小伙伴可以参考一下
    2022-01-01
  • c语言阶乘之和问题示例详解

    c语言阶乘之和问题示例详解

    这篇文章主要给大家介绍了关于c语言阶乘之和问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • C++使用ifstream读取文件内容的示例详解

    C++使用ifstream读取文件内容的示例详解

    这篇文章主要为大家详细介绍了C++如何使用ifstream读取文件内容的功能,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的可以了解一下
    2023-03-03
  • c语言通过栈判断括号匹配是否配对

    c语言通过栈判断括号匹配是否配对

    前面实现了栈的基本数据结构,这里来做一个联系,用栈来解决一道比较常见的算法题,就是括号配对是否满足规则,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-09-09
  • C语言中_string.h库函数功能及其用法详解

    C语言中_string.h库函数功能及其用法详解

    在计算机编程中,字符串处理是一项常见而重要的任务,C语言的string.h头文件提供了一系列函数和工具,用于对字符串进行操作和处理,本文将对string.h头文件中的所有函数进行全面介绍,包括它们的功能和使用方法,以帮助大家更好地理解和利用该头文件
    2023-12-12
  • C++ LeetCode1775通过最少操作次数使数组和相等

    C++ LeetCode1775通过最少操作次数使数组和相等

    这篇文章主要为大家介绍了C++ LeetCode1775通过最少操作次数使数组和相等,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、右左双旋)

    C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、右左双旋)

    AVL树即平衡二叉搜索树,平衡因子bf=右子树的高度-左子树的高度,bf为0,-1,1时,此树即平衡,下面这篇文章主要给大家介绍了关于C++AVL树4种旋转(左单旋、右单旋、左右双旋、右左双旋)的相关资料,需要的朋友可以参考下
    2022-11-11
  • 一波C语言字符数组实用技巧集锦

    一波C语言字符数组实用技巧集锦

    这篇文章主要介绍了一波C语言字符数组实用技巧集锦,包括许多字符的转换与提取等基本操作示例,需要的朋友可以参考下
    2016-04-04
  • 浅谈c++的编译和运行

    浅谈c++的编译和运行

    下面小编就为大家带来一篇浅谈c++的编译和运行。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论