如何用C语言实现以下代码

妙趣前端 2019-10-29 12:37:21
从键盘输入两个数字串, 判断其中一个是否是另一个的子串, 若是则返回母串中第一个 匹配到子串的位置,若不是,则返回-1。 输出例子: 1050 50 结果1 1052 53 结果-1
...全文
404 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
advance_coder 2019-11-08
  • 打赏
  • 举报
回复
char mumstr[256]={}; char childstr[256]={}; char* res=strstr(mumstr,childstr); if(res==NULL){ printf("-1\n"); } printf("%d\n",(int)(res-mumstr));
luj_1768 2019-11-06
  • 打赏
  • 举报
回复
可否如此:只做一个循环(母串依次后移),把母串当前位置到与匹配串相同长度数据拷贝到过程量,用字符串比较函数判断二者是否相等,如果相等返回循环值,否则继续;最后没有匹配项,则返回-1。
闆運厷 2019-11-04
  • 打赏
  • 举报
回复
楼上有正解,参考一下
离水的鱼儿 2019-11-01
  • 打赏
  • 举报
回复
操作指针啊,返回的int pos=pStr-str1,pos就是下标,如果是位置的话就再+1
妙趣前端 2019-10-31
  • 打赏
  • 举报
回复
引用 21 楼 离水的鱼儿的回复:
char *str=“50” char *str1=“1050” char*pStr=strstr(str1,str); 如果找到了 pStr存储的就是查找的字符串首地址,否则为空。
这个我知道了,就是不知道怎么读出在数组的位数
离水的鱼儿 2019-10-31
  • 打赏
  • 举报
回复
char *str=“50” char *str1=“1050” char*pStr=strstr(str1,str); 如果找到了 pStr存储的就是查找的字符串首地址,否则为空。
fengyindesilian 2019-10-31
  • 打赏
  • 举报
回复
19楼正解,楼主可以参考。
qq_41120443 2019-10-30
  • 打赏
  • 举报
回复

#include <stdio.h>
#include<string.h>

int cmp(char* p1, char* p2)
{
int temp = 0,temp1=0;
char* p3 = p2;
for (char* p4=p1; *p1 != '\0'; p1++)
{

for (p2 = p3; *p2 != '\0'; p2++)
{

if (*p2 == *p1)
{
char* p5 = p1;
for (; (*p2 != NULL) && (*p1 != NULL); p2++, p1++)
{
if (*p2 == *p1) { temp = 1; temp1 =( p5 - p4)+1;
}
else { temp = 0; temp1 = 0; break; }
}

}
if (temp == 1)break;
}
if (temp == 1)break;
}
return temp1;
}
int main(void)
{

铖邑 2019-10-29
  • 打赏
  • 举报
回复
strstr看一下,字数字数
qq_41120443 2019-10-29
  • 打赏
  • 举报
回复

#include <stdio.h>
#include<string.h>

int cmp(char* p1, char* p2)
{
int temp = 0;
char* p3 = p2;
for (int i = 0; *p1!= '\0'; p1++)
{
for (p2=p3; *p2!= '\0'; p2++)
{

if (*p2 == *p1)
{
for (; (*p2 != NULL) && (*p1 != NULL); p2++,p1++)
{
if (*p2 == *p1) { temp = 1; }
else { temp = 0; break; }
}

}

}
}
return temp;
}
int main(void)
{
char digit1[10];
char digit2[10];

int i, j, temp = 0;
printf("请输入第一个数字串:\n");
gets_s(digit1);
printf("请输入第二个数字串:\n");
gets_s(digit2);
char* p1=NULL, * p2=NULL;
int a = strlen(digit1);
int b = strlen(digit2);
if (strlen(digit1) <=strlen(digit2))
{
p1 = digit2;
p2 = digit1;
}
else
{
p1 = digit1;
p2 = digit2;
}
temp = cmp(p1, p2);
printf("%d", temp);

return 0;
}

这一段代码可以 ,我编译过了,有问题可以联系我
铖邑 2019-10-29
  • 打赏
  • 举报
回复
这个要自己去想,想不出来就用现成函数算了 https://blog.csdn.net/huan447882949/article/details/82852423
妙趣前端 2019-10-29
  • 打赏
  • 举报
回复
引用 15 楼 SuperDay的回复:
[quote=引用 14 楼 qq_45768871 的回复:] [quote=引用 13 楼 SuperDay的回复:][quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 SuperDay的回复:]digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
这个解决了,但是还是没有发哪里逻辑有问题[/quote] 你这个大角度的思路就不对了,潜在的嵌入的字符串,是需要跟随比较的(同时移动位置),这个根本就不对路,逻辑就更不需要考虑了[/quote] 同时移动?有点不明白[/quote] 真是晕啊,好比你给的例子,遇到5相等的,接下来要同时往后移动,看看0是不是也相等,所以要到所有的字符都对上,你才能认为确实是内嵌啊。建议你写程序的时候,把思路全部捋清楚并且能用脑子来运行一下,才能对题。你这样完全就是跑题了[/quote] 那这个应该怎么写呢?
铖邑 2019-10-29
  • 打赏
  • 举报
回复
引用 14 楼 qq_45768871 的回复:
[quote=引用 13 楼 SuperDay的回复:][quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 SuperDay的回复:]digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
这个解决了,但是还是没有发哪里逻辑有问题[/quote] 你这个大角度的思路就不对了,潜在的嵌入的字符串,是需要跟随比较的(同时移动位置),这个根本就不对路,逻辑就更不需要考虑了[/quote] 同时移动?有点不明白[/quote] 真是晕啊,好比你给的例子,遇到5相等的,接下来要同时往后移动,看看0是不是也相等,所以要到所有的字符都对上,你才能认为确实是内嵌啊。建议你写程序的时候,把思路全部捋清楚并且能用脑子来运行一下,才能对题。你这样完全就是跑题了
妙趣前端 2019-10-29
  • 打赏
  • 举报
回复
引用 13 楼 SuperDay的回复:
[quote=引用 12 楼 qq_45768871 的回复:] [quote=引用 11 楼 SuperDay的回复:]digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
这个解决了,但是还是没有发哪里逻辑有问题[/quote] 你这个大角度的思路就不对了,潜在的嵌入的字符串,是需要跟随比较的(同时移动位置),这个根本就不对路,逻辑就更不需要考虑了[/quote] 同时移动?有点不明白
铖邑 2019-10-29
  • 打赏
  • 举报
回复
引用 12 楼 qq_45768871 的回复:
[quote=引用 11 楼 SuperDay的回复:]digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
这个解决了,但是还是没有发哪里逻辑有问题[/quote] 你这个大角度的思路就不对了,潜在的嵌入的字符串,是需要跟随比较的(同时移动位置),这个根本就不对路,逻辑就更不需要考虑了
妙趣前端 2019-10-29
  • 打赏
  • 举报
回复
引用 11 楼 SuperDay的回复:
digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
这个解决了,但是还是没有发哪里逻辑有问题
铖邑 2019-10-29
  • 打赏
  • 举报
回复
digit2[i]==NULL这个根本就不对!而且字符建议用'\0'增加可读性 digit2[i] != '\0'
妙趣前端 2019-10-29
  • 打赏
  • 举报
回复
引用 9 楼 SuperDay的回复:
[quote=引用 2 楼 qq_45768871 的回复:] [quote=引用 1 楼 SuperDay的回复:]strstr看一下,字数字数
但是不知道怎么实现,逻辑有点问题[/quote] 逻辑有问题的代码,可以贴出来一下[/quote] #include<stdio.h>
#include<string.h>
int main()
{
char digit1[10];
char digit2[10];
int i,j,temp=0;
printf("请输入第一个数字串:\n");
gets(digit1);
printf("请输入第二个数字串:\n");
gets(digit2);
for(i=0;digit2[i]==NULL;i++)
{
for(j=0;digit1[j]==NULL;j++)
{

if(digit2[i]==digit1[j])
{
temp=j+1;
break;
}

}
}
printf("%d",temp);
return 0;
} 只实现一个的逻辑有问题
铖邑 2019-10-29
  • 打赏
  • 举报
回复
引用 2 楼 qq_45768871 的回复:
[quote=引用 1 楼 SuperDay的回复:]strstr看一下,字数字数
但是不知道怎么实现,逻辑有点问题[/quote] 逻辑有问题的代码,可以贴出来一下
妙趣前端 2019-10-29
  • 打赏
  • 举报
回复
引用 7 楼 wowpH的回复:
[quote=引用 6 楼 qq_45768871 的回复:] [quote=引用 5 楼 wowpH的回复:]我发的链接,不要选择性忽略(内心:不要选择性眼瞎)。
用的是手机,没有看到在哪结帖[/quote]哦哦,手机不能结贴。[/quote] 好吧,那我用电脑试一下吧。
加载更多回复(6)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧