函数index()为查找字符串sub是否是字符串st的子串。若是,返回sub在st中首次出现的下标,否则返回-1。字符串sub和st非空。如sub:“cd”,st:“abcdefcd”,返回2。
#include"iostream.h"
#include"stdio.h"
void main()
{
char s1[80],s2[80];
_______________;
gets(s1);gets(s2);
if(_____________)
cout<<“子串在字符串中首次出现的下标:"<<index(s1,s2);
else
cout<<"找不到";
}
int index(char st[ ],char[ ])
{
int i,j,k;
for(i=0;st[i]!='\0';i++)
{
for(j=i,k=0;sub[k]!='\0'&&st[j]==sub[k];____________);
if(sub[k]=='\0')______________;
}
return 0;
}
麻烦各位大哥大姐帮我填下空,并写出原因,谢谢了!
不存在返回值用-1表示比较好, 你最后返回0来表示不存在,如果有下标表示在第几个也行, 但不太符合C语言的习惯, 下标从0开始, 再者字符串匹配有许多算法, 这只是最简单直接算法, 下面是指针版本,返回要查找的模式在母串的第一次出现的指针, 用0表示失败没有找到
int index(char *s, char *t)
{
for(; *s != '\0'; s++)
{
for(char *k = s; *t != '\0' && *k == *t; t++, k++ )
;
if(*t == '\0')
return s;
}
return 0;
}
#include"iostream.h"
#include"stdio.h"
void main()
{
char s1[80],s2[80];
int index(char st[ ],char[ ]); // 函数声明
gets(s1);gets(s2);
if( index( s1, s2 ) >= 0 ) // 返回>=0的数表示找到
cout<< "子串在字符串中首次出现的下标:"<<index(s1,s2);
else
cout<<"找不到";
}
int index(char st[ ],char sub[ ])
{
int i,j,k;
for(i=0;st[i]!='\0';i++)
{
for(j=i,k=0;sub[k]!='\0'&&st[j]==sub[k];++k, ++j ); // 递增比较确认相等
if(sub[k]=='\0') return i; // 如果k增加到sub[k] = '\0'也就是到达了sub的结尾,那么表示找到字串,返回起始下标i
}
return -1; // 没有找到返回-1
}