用C语言编写函数计算子字符串substr在主字符串mainstr中的索引值

32 篇文章 0 订阅

在大小写敏感的前提下,用C语言编写函数计算子字符串substr在主字符串mainstr中的索引值。

如果substr完全包含在mainstr中,请计算出索引值。否则,返回-1.


具体代码如下:

findstr.c

/**

Author: snowdream <yanghui1986527@gmail.com>

Data: 2012.03.05

Description:
假设一个主要字符串“Hello World!”,和一个子字符串"World".
在大小写敏感的前提下,如果主字符串包含子字符串,请写出一个函数
计算出该子字符串在主字符串中的索引index。否则返回 -1 作为索引值。

*/




#include <stdio.h>

int findstr(char* substr,char* mainstr)
{
    int index = -1;
    
    for(int i = 0; *(mainstr+i)!='\0';i++)
    {
        for(int j = 0; *(substr+j)!='\0';j++)
        {
            if(*(substr+j) != *(mainstr+i+j))
                break;
            
            if(*(substr+j+1) =='\0' )
                index = i;
        }
        
       if(index != -1)
           break;
    }    
    
    return index;
}


int main()
{
    int index = -1; 
    int index1 = -1;
    
    char* mainstr = "Hello World!";
    char* substr = "cctv";  
    char* substr1 = "World";
   
    index = findstr(substr,mainstr);
    index1 = findstr(substr1,mainstr);
   
    printf("The index of %s in %s is: %d\n",substr,mainstr,index);
    printf("The index of %s in %s is: %d\n",substr1,mainstr,index1);

    return 0;
}


在ubuntu下编译运行:

snowdream@snowdream:~$ gcc findstr.c -std=gnu99 -o findstr -g
snowdream@snowdream:~$ ./findstr 
The index of cctv in Hello World! is: -1
The index of World in Hello World! is: 6


欢迎大家关注我的微信公众号:

微信公众号:sn0wdr1am


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于定长顺序存储结构实现对串的赋、串比较、求串的位置、串替换等操作。要求所有操作均以函数的形式实现,在函数调用各个函数实现整体功能。 注意:每一个字符串的第一个元素存放的是该字符串的长度(不包括第一个元素),除串的赋外,其他所有操作(比较、求串的位置、串替换)等都不应包含该字符。 1.1.实验1:串赋函数实现: 按照系统已经定义的函数接口编写函数实体,实现:将输入数组StrInput[]的数据赋给待赋数组StrTobeAssigned[],其待赋数组StrTobeAssigned[0]存放有效数据的长度,StrTobeAssigned[1]之后存放带赋数据。 具体要求和相关假设为: ① 函数接口定义为:int MyStrAssign(char * StrTobeAssigned, char * StrInput); ② 输入参数:待赋字符串变量StrTobeAssigned,字符串的期望StrInput; ③ 输出参数:无; ④ 处理规则及返回:将StrTobeAssigned[1]及之后的内容赋StrInput的有效内容,StrTobeAssigned[0]赋StrInput有效字符的长度,并返回1; ⑤ 假设: a)两个字符串均不为空串; b)StrInput存放的是一个完成的字符串(不包含长度); c)赞不考虑输入数据超过数组总长度的情况。 1.2实验2:串替换函数: 按照系统已经定义的函数接口编写函数实体,实现:在MainStr查找是否存在某特定SubStr1,若存在则将所有的SubStr1替换为新的指定SubStr2,函数返回字符串替换的次数。 具体要求和相关假设为: ① 函数接口定义为:int MyStrReplace(char * MainStr, char * SubStr1, char * SubStr2); ② 输入参数:串变量MainStr串变量SubStr1,SubStr2; ③ 输出参数:无; ④ 处理规则及返回:若存在串,用SubStr2替换MainStr出现的所有与SubStr1相同的不重叠的串,并返回字符串替换的次数;否则返回0。 ⑤ 假设: a)串和两个串均不为空串; b)MainStr[0]和SubStr1[0],SubStr2[0]分别存放对应字符串的长度,不用替换该部分。 2.问题分析 (1)根据实验一的内容可知,我们需要通过编写函数实体的形式实现串的赋操作,要的思路包括: (a)获得输入字符串的长度len; (b)将输入字符串的长度len赋给待赋字符串的第一个元素StrTobeAssigned[0]; (c)依次将输入字符串的数据赋给待赋字符串。 (2)根据实验二的内容可知,我们需要通过编写函数实体的形式实现串的替换操作,要的思路包括: (a)遍历MainStr,检查是否存在某特定SubStr1; (b)如果存在则找到串在的位置; (c)在删除该串并更新串长度; (d)在插入该串并更新串长度; (e)过程记录替换字符串的次数,遍历结束后返回该次数(如果没有替换则为0); 如果有必要,可以使用本实验已经提供的相关函数,如:求串位置的函数MySubStrIndex(),串删除函数MyStrDelete()和串插入函数MyStrInsert()等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值