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。