0
2つの文字列の間の最大の重なりを見つけようとしています。新しい文字列に重複した文字を1回だけ印刷します(文字列の組み合わせ)
#include<stdio.h>
#include<string.h>
int main(void)
{
char string1[64],string2[64];
char s3[128];
int len=0;
printf("Enter string1");
scanf("%s",string1);
printf("Enter string2");
scanf("%s",string2);
for (char* s1 = string1; *s1 != '\0'; ++s1)
{
int overlap = 0;
for (char* s2 = string2; *s2 != '\0'; ++s2)
{
while (s1[overlap] != '\0' && s1[overlap] == s2[overlap])
{
++overlap;
}
if (len < overlap)
{
len = overlap;
}
}
s3[overlap]=string1[overlap];
}
printf("%d\n",len);
printf("%s\n",s3);
printf(strcat(string1,string2));
return 0;
}
私は最大オーバーラップオーバーラップでそれらの文字を発見したが、私は私の答えを得るために2列の組み合わせから重複を減算する方法がわからないです。例:a123とa123457は私に4とa123457を与えます(a123は1回しか出現しません)。
コードされますうまく動作しますが、それは私にすべての文字を与えるわけではありません。例:abcdと123を入力すると、0とabcd123cが返されますが、結果として123が返されます。 – Harry
@ハリー "重複しない"状況はまっすぐで、私はそれを処理するために自分のコードを修正しました。しかし、それが何をすべきかは、仲裁とアプリケーションまでです。私は2つの文字列を等価として処理していたので、逆の順序でテストしましたが、「重複しない」場合は明白な出力はありませんが、アプリケーションでstring1優先順位が与えられていれば私が実装したソリューションです。 – cdlane