void HorspoolMatching(unsigned char T[], char P[])
{
int i = 0, k, m, n;
int count = 0;
//int *p;
int val;
ShiftTable(P);
m = strlen(P);
n = strlen(T);
i = m - 1;
while(i < n)
{
k = 0;
while((k < m) && (P[m - 1 - k] == T[i - k]))
{
k++;
}
if(k == m)
{
count++;
i += m;
} else{
val = (int)T[i];
if (val < 0 || val >= MAX) {
i = i + m;
} else {
i = i + table[val];
}
}
}
printf("%d\n", count);
}
...unsigned char *の長さ?私はエラーなし符号なしのパラメータの長さを取得するにはどうすればよい
printf("Enter name of the data file: ");
scanf("%s", filenameFOUR);
FILE *fp4;
fp4 = fopen(filenameFOUR, "r");
if(fp4 == NULL)
{
printf("Error");
exit(0);
}
while((inc = fgetc(fp4)) != EOF)
{
buf[n++] = (char) inc;
}
fclose(fp4);
printf("Enter a pattern to search: ");
scanf("%s", pat2);
ftime(&before);
HorspoolMatching(buf, pat2);
ftime(&after);
int diffTime4 = (after.time - before.time)*1000 +
(after.millitm - before.millitm);
printf("Time it took: %d milliseconds.\n", diffTime4);
?私の出力が正しくないので、符号なしの文字に変更することをお勧めしました。私はhorspoolアルゴリズムを使用して一致を見つけるためにテストファイルを調べようとしています。
warning: passing 'unsigned char *' to parameter of type
'const char *' converts between pointers to integer types with different
sign [-Wpointer-sign]
n = strlen(T);
^
/usr/include/string.h:82:28: note: passing argument to parameter here
size_t strlen(const char *);
メインを追加してください。 –
'テーブル'とは何ですか? 'ShiftTable'とは何ですか?これをお読みください[mcve]。 –
*文字列*がある場合、なぜ 'char'の代わりに' unsigned char'を使うのですか?データが文字列でない場合は、 'strlen'を使用することはできず、関数の引数としてデータの長さを渡す必要があります。 –