c 语言 求子串在主串中的位置

问题描述

c 语言 求子串在主串中的位置

写了一个简单的求子串在主串第一次出现的位置的方法

int index(char str[],char substr[]){//求字串第一次出现的位置

int i=0,j=0,num=0;

while(str[i]!=''&&substr[j]!=''){

   if(str[i]!=substr[j]){

         j=0;i=i+1; num=i;}
   else{
        i++;j++;
   }

}
if(substr[j]=='')
return num;

肯定有遗漏的情况,希望高手补充,谢谢

解决方案

第一:
if(substr[j]=='')
return num;
错了,
假如这句话不执行,则没有返回值。

第二:
加入字串1为:11234,字串2为:12
你的代码判断不出来,你可以自己分析一下原因

第三:
一点个人建议,编程风格问题:
不要使用i,j这类的名字了,改为 str1_pos,str2_pos一类的(pos是position简写的)

解决方案二:

谢谢啦,编程风格真的很重要的。

时间: 2025-01-15 02:34:18

c 语言 求子串在主串中的位置的相关文章

用TSQL求子串在父串中出现的次数

导言 由于SQL Server本身没提供计算一个字符串在另一个字符串重复次数的函数, 大家按照自己的思路使用自定义函数实现了该功能,并在网上传播.我阅读了同 事从网上获取的该函数的一个版本后,便发现该函数存在一个明显的逻辑错误. 为了进一步确认这个问题,我在Google上搜索相关关键字,发现该功能多数的实 现思路一致,但大多数都存在这个共同的逻辑错误.可见从网络上获取的一些资 源,可以作为参考,但要在实际需求中能够应用,是需要仔细检查的. 功能实现 常见方法 以下是网上一种较常见的函数实现: S

KMP串中的模式匹配算法及从next[]到nextVal[]

KMP串中的模式匹配算法 一般的匹配算法: KMP基本概念引入: 但是,其实我们会发现,上面的中间两个匹配步骤是没有必要的,因为他们的第一个匹配字母就不相同,完全没有可比性,而当我们在第四次匹配的时候,其 实我们从模式串中就可得知,只有当模式串滑到这个地方的时候,它的匹配才是最有价值的,因为从模式串中我们可以得知,最后一个C的前一个字母是a,而在模 式串中的第二个字母b的前一个字母也是a,再无其他,从第一步匹配的结果我们可以得知,模式串中的最后一个字母c与主串中的b匹配失败(读者们是否注意 到,

c语言-C语言中函数调用出错问题的解决方法,主函数中的函数参数问题

问题描述 C语言中函数调用出错问题的解决方法,主函数中的函数参数问题 最后的主函数中的Locatei(&Q)一直提示参数不够,但我添加了指向pos的整型变量并赋值给i后仍不能成功,我现在不知道是调用错了还是那里的问题,求解答啊! include include include #define ERROR 0 #define OK 1 #define RL 200 typedef struct{ char *name[RL]; char *phonenum[RL]; char *add[RL];

1-0组成的串中,1和0个数相等的最长子串

同学面试遇到的题,我以尽量简单的方式描述,偶子串这个概念是为了表述创造的概念. Problem 如果一个串只由1和0组成,并且其中1和0的个数相等,我们称之为偶子串.给出一个只由1和0组成的串,求这个串中的子串中,最长的偶子串. Input 第一行是N,测试用例的总数,接下来是N行1和0组成的串 Output N行结果,最长偶子串可能有多 Sample Input 5 100111011001 10001111 10010111 100111010011 0111101010101110 Out

objective c语法-OC-NSString中,写了一个在母串中查找子串的位置,但是检索的信息有遗漏,请问是哪儿出现了问题?

问题描述 OC-NSString中,写了一个在母串中查找子串的位置,但是检索的信息有遗漏,请问是哪儿出现了问题? NSString * motherstr = @"w is w is w"; NSString * sonstr = @"w"; NSRange range = [motherstr rangeOfString:sonstr]; while(range.location != NSNotFound) { NSLog(@"start = %@&q

c语言程序设计-C语言求从n个数中选出k个的最优算法

问题描述 C语言求从n个数中选出k个的最优算法 在计算组合问题时一般算法总会溢出,有没有啥极快又可以避免溢出的算法? 解决方案 外部排序,你可是试试看

c语言-大神求教C语言,知道二叉树先序中序遍历序列,求后序遍历序列。

问题描述 大神求教C语言,知道二叉树先序中序遍历序列,求后序遍历序列. #include#include#include using namespace std; typedef struct Btree{ struct Btree *left; struct Btree *right; char data;}Node; void Create_Btree(Node *tree char *pre int pre_low int pre_high char *middle int middle_

变元-c语言如何在子函数读取主函数中的数组

问题描述 c语言如何在子函数读取主函数中的数组 要一次性全部读取这个数组,不需要改变数组. 比如我有个数组a[10].我想一次性在子函数中读取a从1到10的所有字符.如果不通过指针,可以用变元传递嘛 解决方案 你用数组做形参,传过去的实参相当于传指向数组的指针. 解决方案二: 标准C语言,没有你所说的变元的东东.变元,都是后来 C++/C# 才有的. 指针是最方便的,其它不想说了. 解决方案三: c语言就指针了吧!其他的没有指针直接了! 引用,变元都不是c的东西了! 说具体需求吧 解决方案四:

C语言求两个字符串的最长公共子串_C 语言

本文实例讲述了C语言求两个字符串的最长公共子串的方法.分享给大家供大家参考.具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * str3); int stringLength(char * str); void main(){ char str1[50]; char st