gpt4 book ai didi

c - 查找与一个字符串的结尾和下一个字符串的开头相匹配的最长子字符串

转载 作者:行者123 更新时间:2023-11-30 21:36:26 27 4
gpt4 key购买 nike

任务是找到string1末尾(即string2)开头的最长子字符串。

例如,如果string1是“monitor”,string2是“orange”,则输出必须是“or”。

例如,如果 string1 是“bridge”,string2 是“gear”,则输出必须是“ge”。

不幸的是,我的代码将“bridge”/“gear”示例的答案给出为“rge”。请帮我找出这段代码中的错误。

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

void main()
{
char a[80],b[80];
int i,j,t;
scanf("%s",a);//input s1 example bridge
scanf("%s",b);//input s2 example gear
for(i=0;a[i]!='\0';i++)//traversing through first string
{
for(j=i-1;j>=0;j--)

if(a[i]==a[j])
break;
if(j==-1)
for(t=0;b[t]!='\0';t++)

if(a[i]==b[t])
{
printf("%c",a[i]); //output must be ge but this code gives me the output as rge
break;
}

}
}

最佳答案

我建议您使用strncmp()函数来比较字符串。它确实有助于完成任务。这是简短、可读且易于理解的代码:

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

void main()
{
char a[80],b[80];
char* pa;

scanf("%s",a); //input s1 example bridge
scanf("%s",b); //input s2 example gear

// Iterate over "end substrings" of s1 (from the longest to the shortest)
for (pa = a; *pa != '\0'; pa++)
{
// Compare with "start substring" of s2
if (strncmp(pa, b, strlen(pa)) == 0)
// Here it matches: exit from loop !
break;
}

// Display the result
if (strlen(pa) == 0)
{
printf("Nothing found\n");
}
else
{
printf("Found: %s\n", pa);
}
}

我还可以建议您采取以下非常简短的方法:

void main()
{
char a[80],b[80];
char* pa = a;

scanf("%s",a); //input s1 example bridge
scanf("%s",b); //input s2 example gear

while (strncmp(pa, b, strlen(pa)) && (*(++pa) != '\0'));

printf("%s", strlen(pa) == 0 ? "Nothing found" : pa);
}

关于c - 查找与一个字符串的结尾和下一个字符串的开头相匹配的最长子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com