int substrpos(char *s,char *t) { // 返回字符串s中包含子串t的首字母位置
char *p = s,*q,*pt
int pos
while(*p) {
q = t
pos = p - s
pt = p
while(*q++ == *pt++)
if(*--q == '\0') return pos
++p
}
return -1
}
int main () {
char s[] = "asjhfeasjdeasjdiaske",t[] = "sk"
int pos = substrpos(s,t)
if(pos >= 0) printf("%s 在 %s 中首字符位置是 : %d\n",t,s,pos)
else printf("%s 中不包含 %s。\n",s,t)
return 0
}
在string.h里有个strstr方法是用来查找子字符串的,但一般不能用这个方法,通常的方法就是假定有一个字符串s,长度为a(长度可以由strlen求出或者自己算),子字符串s1长度为b,那么从s的第0个字符开始(i),到a-b+1为止,逐一用strncmp比较s1是否与s+i开始的长度为b的字符相等,如果相等,i就是当前的位置了
#include<stdio.h>
#include<string.h>
#define N 100
void main() {
char s[N],s1[N]
int i,a,b,k=-1
gets(s)
gets(s1)
a=strlen(s)
b=strlen(s1)
for(i=0i<a-b+1i++) {
if((strncmp(s1,s+i,b))==0) {
k=i
break
}
}
if(k>-1)
printf("%d",k)
else printf("not found")
}