【C语言】输入的两个字符串,查找第二个字符串是否是第一个字符串的子串

1.源代码

#include "stdio.h"
#include "string.h"
int findsubstring(char *s,char *sub)
{
    int i,j;
	int len1=strlen(s);
	int len2=strlen(sub);
	
	for(i=0;i<len1-len2;i++){  
		for(j=0;j<len2;j++){
			if(s[i+j]!=sub[j]){
				break;
			}
		}
	}
	if(j==len2)
	return i;

return -1;
}
int main()
{    char line[80],substr[10];
     int index;
     gets(line);
     gets(substr);
     index=findsubstring(line,substr);
     if(index>=0)
         printf("index=%d\n",index);
     else
         printf("NOEXIST\n");
     return 0;
}

2.代码思路

  • #include "stdio.h" 和 #include "string.h" 是两个预处理指令,用于包含标准输入输出头文件和字符串操作头文件,以便使用 printf()scanf()strlen() 等函数。
  • int findsubstring(char *s,char *sub) 是一个自定义函数,用于在一个字符串中查找一个子串的索引。它有两个参数:
    • char *s 是一个指向字符串的指针,用于传递主串的首地址。
    • char *sub 是一个指向字符串的指针,用于传递子串的首地址。
  • 函数体中,首先定义了两个整数变量 i 和 j,用于表示循环的控制变量;以及两个整数变量 len1 和 len2,用于存储主串和子串的长度。然后使用 strlen() 函数,分别计算 s 和 sub 的长度,赋值给 len1 和 len2
  • 然后使用一个嵌套的 for 循环,实现子串匹配的算法,对主串进行遍历。外层循环从 i = 0 到 i < len1 - len2,内层循环从 j = 0 到 j < len2,每次循环中比较 s[i + j] 和 sub[j] 是否相等,如果不相等,就跳出内层循环,继续外层循环;如果相等,就继续内层循环,直到 j 等于 len2,表示子串已经完全匹配。
  • 如果 j 等于 len2,就返回 i 的值,表示子串在主串中的起始索引;如果外层循环结束后,j 不等于 len2,就返回 -1,表示没有找到子串。
  • int main() 是程序的主函数,程序的执行从这里开始。
  • 函数体中,首先定义了一个长度为 80 的字符数组 line,用于存储主串;以及一个长度为 10 的字符数组 substr,用于存储子串;以及一个整数变量 index,用于存储查找结果。
  • 然后使用 gets(line) 函数,从标准输入读取一行字符串,存储到数组 line 中,作为主串;再使用 gets(substr) 函数,从标准输入读取一行字符串,存储到数组 substr 中,作为子串。
  • 接着调用 findsubstring(line,substr) 函数,将数组 line 和 substr 的地址作为参数传递,函数会返回子串在主串中的索引,赋值给 index
  • 然后判断 index 是否大于或等于 0,如果是,就使用 printf("index=%d\n",index) 函数,打印 index 的值,表示找到了子串;如果不是,就使用 printf("NOEXIST\n") 函数,打印 NOEXIST,表示没有找到子串。
  • 最后使用 return 0 语句,结束主函数。

一个可能的输出样例是:

输入:hello world
输入:world
输出:index=6

这表示用户输入了两个字符串,分别是 hello world 和 world,在第一个字符串中,第二个字符串的起始索引是 6,所以打印 index=6。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值