プログラムは、ユーザーが希望する任意の入力 (この場合は a と b の文字列のみ) を「*」で終了するものとして読み込む必要があります。次に、検索する部分文字列 (この場合は「baab」) をユーザーに入力するように求めます。部分文字列が見つかった場合、プログラムは「はい」を示し、見つからない場合は「いいえ」を示します。組み込みのマッチング ユーティリティを使用することは許可されておらず、一度に 1 文字ずつ読み取る必要がありました。
gets() を scanf に置き換えたところ、部分文字列を入力して一致していると確信しても、まだいいえと表示されますか?
#include<stdio.h>
#include<string.h>
int search(char[], char[]);
int main()
{
char a[100], b[40];
int loc;
printf("Enter the main string :");
scanf("%s", a);
printf("Enter the search string :");
scanf("%s", b);
loc = search(a, b);
if (loc == -1)
printf("No");
else
printf("Yes %d", loc + 1);
return (0);
}
int search(char a[], char b[])
{
int i, j, firstOcc;
i = 0, j = 0;
while (a[i] != '*')
{
while (a[i] != b[0] && a[i] != '*')
i++;
if (a[i] == '*')
return (-1);
firstOcc = i;
while (a[i] == b[j] && a[i] != '*' && b[j] != '*')
{
i++;
j++;
}
if (b[j] == '*')
return (firstOcc);
if (a[i] == '*')
return (-1);
i = firstOcc + 1;
j = 0;
}
}