题目:实现一个字符串查找的程序
要求:给定一个字符串s=princess-connect-redive,让用户查找connect,判断connect是否在字符串s当中。
不得使用内置字符串函数,请自行编写程序实现一个字符串查找的算法。
解题思路:编写字符串查找函数
先看主函数
int main()
{
char s[]="princess-connect-redive";
char str0[]="connect";
int res = strcompare(str0,s);
printf("大家好,这是字符串查找程序,如下:\n");
if(res)
printf("%s在%s中\n\n",str0,s);
else
printf("%s不在%s中\n\n",str0,s);
while(1) {
strinput();}
return 0;
}
字符串s和str0为题目要求比较的字符串;strcompare()为字符串比较函数; strinput()为字符串输入函数。关键函数:
1、获取字符串长度的函数strlength
/************************
函数:int strlength(char *s)
功能:返回输入字符串的长度
参数:字符串 char *s
返回值:int整型
*************************/
int strlength(char *s)
{
int count = 0;;
for(int i=0;i<100;i++)
{
if(s[i]=='\0')
break;
else
count++;
}
return count;
}
2、字符串查找比较函数strcompare
/************************
函数:int strcompare(char *s)
功能:输入字符串str1,str2,判断str1是否在str2中,
是则返回1,否则返回0
参数:字符串 char *str1,char *str2
返回值:int整型(1或者0)
*************************/
int strcompare(char *str1,char *str2)
{
int res,n,m;
n = strlength(str1);
m = strlength(str2);
if(n>m)
res = 0;
else if(str1[0]=='\0')
res = 0;
else
{
int count = 0,i = 0;
for(int j=0;j<m;j++)
{
if(str1[i]!='\0' || str2[j]!='\0')
break;
A: if(str1[i] == str2[j])
{
i++;
j++;
count++;
goto A;
}
else
{
if(count==n)
return res=1;
else
{
if(j==m)
{
res = 0;
break;
}
else
{
i = 0;
count = 0;
}
}
}
}
}
return res;
}
3、字符串输入函数strinput
/************************
函数:int strinput(void)
功能:从键盘输入两个字符串,判断要查找的字符串是否在
被查找的字符串之中,并输出比较结果
参数:无
返回值:无
*************************/
void strinput(void)
{
char str1[100],str2[100];
printf("请输入bei查找的字符串:");
gets(str2);
printf("请输入yao查找的字符串:");
gets(str1);
int res = strcompare(str1,str2);
if(res)
printf("查找结果:%s在%s中\n\n",str1,str2);
else
printf("查找结果:%s不在%s中\n\n",str1,str2);
}
完整代码如下:
//字符串查找
#include <stdio.h>
int strlength(char *s);
int strcompare(char *str1,char *str2);
void strinput(void);
int main()
{
char s[]="princess-connect-redive";
char str0[]="connect";
int res = strcompare(str0,s);
printf("大家好,这是字符串查找程序,如下:\n");
if(res)
printf("%s在%s中\n\n",str0,s);
else
printf("%s不在%s中\n\n",str0,s);
B: strinput();
goto B;
return 0;
}
//返回字符串的长度,要求字符串的长度不能超过100
int strlength(char *s)
{
int count = 0;;
for(int i=0;i<100;i++)
{
if(s[i]=='\0')
break;
else
count++;
}
return count;
}
//查找字符串str1是否在str2中,是则返回1,否则返回0
int strcompare(char *str1,char *str2)
{
int res,n,m;
n = strlength(str1);
m = strlength(str2);
if(n>m)
res = 0;
else if(str1[0]=='\0')
res = 0;
else
{
int count = 0,i = 0;
for(int j=0;j<m;j++)
{
if(str1[i]!='\0' || str2[j]!='\0')
break; //少了这个if检测最后一个字符就会出错!
A: if(str1[i] == str2[j])
{
i++;
j++;
count++;
goto A;
}
else
{
if(count==n)
return res=1;
else
{
if(j==m)
{
res = 0;
break;
}
else
{
i = 0;
count = 0; //count必须要复位!
}
}
}
}
}
return res;
}
void strinput(void)
{
char str1[100],str2[100];
printf("请输入bei查找的字符串:");
gets(str2);
printf("请输入yao查找的字符串:");
gets(str1);
int res = strcompare(str1,str2);
// printf("被查找的字符串的长度是%d\n",strlength(str2));
// printf("要查找的字符串的长度是%d\n",strlength(str1));
if(res)
printf("查找结果:%s在%s中\n\n",str1,str2);
else
printf("查找结果:%s不在%s中\n\n",str1,str2);
}
运行效果如下: