飞机上搞赵丽颖全文:C语言,很难的题,老师都做不出来。

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 00:06:45
编写一个程序,用于接受2个字符串,判断第1个字符串中是否包含第2个字符串,如果包含说明第2个字符串在第1个字符串中的位置(即:第2个字符串第1个字符在第一感字符串中出现的位置)。

我的思路有点乱,

在编程中遇到一点问题,
如果用户输入第1字符串 mornning 第2个字符串 nning如果是这样的形式该怎么判断?
还是不行。`如果2个以上重复就不知道该怎么办了。

就像里子似的,

我和老师都做了,如果用户输入
morning
ning 这样能判断出来包括,第几个字符。

如果是
mornning
nning
如果是这样的话就不行了,怎么也想不出来该怎么办,看了你们的也做了一下,还是不行。`

思路
两个字符串a[i],b[j]
用一个循环,k从0到strlen(a)-1,
然后就是把a[k]开始的strlen(b)个数附给c字符串数组
然后判断c是否与b相等(可以定义成一个函数)
如果 是 跳出,
不是 继续循环

小儿科,没一点挑战性,你们我怀疑你们老师是不是该换了?

开始输入两个字符串开始.
/*****************************************/
#include<stdio.h>
/*****************************************/
int strlen1(char *str1);
int include1(char *string1,char *string2);
/*****************************************/
int main(void)
{
unsigned int sum=0;
char str1[20],str2[20];
scanf("%s%s",str1,str2);
/*sum=strlen1(str1);*/
sum=include1(str1,str2); /*sum等于0代表没,否则给你说位置*/
printf("%d\n",sum);
return 0;
}
/*****************************************/
int strlen1(char *str1)
{
char *str2=str1;
for(;*str2;str2++);
return str2-str1;
}
/*****************************************/
int include1(char *string1,char *string2)
{
unsigned int i=0,sum=1,j=0;
if((strlen1(string1))<strlen1(string2))
{
printf("error\n");
return 0;
}
loop:
for(;*(string1+i)!=*string2&&*(string1+i);i++,sum++);
if(*(string1+i))
{
for(;*(string1+i)==*(string2+j)&&*(string2+j);i++,j++);
if(*(string2+j)=='\0') return sum;
else
goto loop;
}
else
return 0;
}
/*****************************************/

不好意思,刚刚才想到goto里面不能执行循环的.修改后的:

/*****************************************/
#include<stdio.h>
/*****************************************/
int strlen1(char *str1);
int include1(char *string1,char *string2);
/*****************************************/
int main(void)
{
unsigned int sum=0;
char str1[20],str2[20];
scanf("%s%s",str1,str2);
/*sum=strlen1(str1);*/
sum=include1(str1,str2); /*sum等于0代表没,否则给你说位置*/
printf("%d\n",sum);
return 0;
}
/*****************************************/
int strlen1(char *str1)
{
char *str2=str1;
for(;*str2;str2++);
return str2-str1;
}
/*****************************************/
int include1(char *string1,char *string2)
{
unsigned int i=0,sum=1,j=0,num=0,k=0;
if((num=strlen1(string1))<strlen1(string2))
{
printf("error\n");
return 0;
}
for(;i<num;i++)
{
if(*(string1+i)==*string2)
{
for(j=0,k=i;*(string1+k)==*(string2+j)&&*(string1+k);k++,j++);
if(*(string2+j)=='\0')
return sum;
}
sum++;
}
return 0;
}
/*****************************************/

经典KMP算法可以在线性时间内解决的问题。

你的老师可以下岗了

小哥
题目起的不错

要换老师啦,还教C