2001-06-20 21:47:31 +00:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
2001-06-20 23:33:30 +00:00
|
|
|
* Copyright (C) 2001, International Business Machines
|
2001-06-20 21:47:31 +00:00
|
|
|
* Corporation and others. All Rights Reserved.
|
|
|
|
*
|
|
|
|
***************************************************************************
|
|
|
|
* file name: colex.cpp
|
|
|
|
*
|
|
|
|
* created on: 2001June8
|
|
|
|
* created by: Helena Shih
|
|
|
|
*
|
|
|
|
* Sample code for the ICU Search C++ routines.
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#include "unicode/unistr.h"
|
|
|
|
#include "unicode/locid.h"
|
|
|
|
|
|
|
|
#include "strsrch.h"
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
|
|
UnicodeString target("A quick fox jumped over the lazy dog.", "");
|
|
|
|
UnicodeString easyPatterns[] = {"FoX", "CAT", "jump", "under" };
|
|
|
|
int exactOffsets[] = { -1, -1, 12, -1 };
|
|
|
|
int tertiaryOffsets[] = { 8, -1, 12, -1 };
|
|
|
|
UnicodeString monkeyTarget("abcdefgh");
|
|
|
|
UnicodeString monkeyTarget2("ijklmnop");
|
|
|
|
|
|
|
|
int i, j;
|
|
|
|
int pos = 0;
|
|
|
|
StringSearch *searchIter = new StringSearch(easyPatterns[0], target, status);
|
|
|
|
fprintf(stdout, "\n");
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to create a StringSearch object for the default locale.\n");
|
|
|
|
}
|
|
|
|
fprintf(stdout, "Try with default normalization mode and strength.\n");
|
2001-06-20 23:33:30 +00:00
|
|
|
i = 0;
|
|
|
|
while (TRUE)
|
2001-06-20 21:47:31 +00:00
|
|
|
{
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->reset();
|
|
|
|
pos = searchIter->next();
|
|
|
|
if ( pos != exactOffsets[i] )
|
|
|
|
fprintf(stdout, "Exact match failed at the index %d pattern.\n", i);
|
|
|
|
|
2001-06-20 23:33:30 +00:00
|
|
|
i ++;
|
|
|
|
if (i == 4) {
|
2001-06-20 21:47:31 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2001-06-20 23:33:30 +00:00
|
|
|
searchIter->setPattern(easyPatterns[i], status);
|
2001-06-20 21:47:31 +00:00
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for %d element.\n", i);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fprintf(stdout, "Try now with strength == primary.\n");
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->setStrength(Collator::PRIMARY, status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set strength of the string search object.\n");
|
|
|
|
}
|
|
|
|
searchIter->reset();
|
|
|
|
searchIter->setPattern(easyPatterns[0], status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the first element.\n");
|
|
|
|
}
|
|
|
|
pos = searchIter->first();
|
|
|
|
if (pos != tertiaryOffsets[0])
|
|
|
|
fprintf(stdout, "Tertiary match failed at the first pattern.\n");
|
|
|
|
for (i = 1; i < 4; i++)
|
|
|
|
{
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->setPattern(easyPatterns[i], status);
|
|
|
|
searchIter->reset();
|
|
|
|
pos = searchIter->next();
|
|
|
|
if (pos != tertiaryOffsets[i])
|
|
|
|
fprintf(stdout, "Tertiary match failed at index %d pattern.\n", i);
|
|
|
|
}
|
|
|
|
// Going backwards
|
|
|
|
searchIter->reset();
|
|
|
|
searchIter->setPattern(easyPatterns[--i], status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the last element.\n");
|
|
|
|
}
|
|
|
|
pos = searchIter->last();
|
|
|
|
if (pos != tertiaryOffsets[i])
|
|
|
|
fprintf(stdout, "Tertiary match failed at the last pattern.\n");
|
|
|
|
for (; i >= 1 ; --i)
|
|
|
|
{
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->setPattern(easyPatterns[i-1], status);
|
|
|
|
searchIter->reset();
|
|
|
|
pos = searchIter->previous();
|
|
|
|
if (pos != tertiaryOffsets[i-1])
|
|
|
|
fprintf(stdout, "Walking backwards: tertiary match failed at index %d pattern.\n", i);
|
|
|
|
}
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->setTarget(monkeyTarget);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the monkey target.\n");
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
searchIter->setStrength(Collator::TERTIARY, status);
|
|
|
|
// change direction again
|
|
|
|
searchIter->reset();
|
|
|
|
searchIter->setPattern(monkeyTarget, status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern as monkey test itself.\n");
|
|
|
|
}
|
|
|
|
pos = searchIter->first();
|
|
|
|
if (pos == -1)
|
|
|
|
fprintf(stdout, "Matching monkey test itself failed.\n");
|
|
|
|
for (i = 0; i < monkeyTarget.length() - 1; i++)
|
|
|
|
{
|
|
|
|
// will always find its substring
|
|
|
|
for (j = i+1; j < monkeyTarget.length(); j++)
|
|
|
|
{
|
|
|
|
UnicodeString temp;
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->reset();
|
|
|
|
monkeyTarget.extract(i, j, temp);
|
|
|
|
searchIter->setPattern(temp, status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the %d -th monkey pattern of length %d.\n", i, j);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
pos = searchIter->next();
|
|
|
|
if (pos == -1)
|
|
|
|
fprintf(stdout, "Monkey match failed at index %d in monkey pattern of length %d.\n", i, j);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
searchIter->setTarget(monkeyTarget2);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the monkey target2.\n");
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
for (i = 0; i < monkeyTarget.length() - 1; i++)
|
|
|
|
{
|
|
|
|
// will never find the match
|
|
|
|
UnicodeString temp;
|
|
|
|
status = U_ZERO_ERROR;
|
|
|
|
monkeyTarget.extract(i, monkeyTarget.length(), temp);
|
|
|
|
searchIter->reset();
|
|
|
|
searchIter->setPattern(temp, status);
|
|
|
|
if (U_FAILURE(status))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Failed to set a pattern for the monkey pattern at offset index %d.\n", i);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
pos = searchIter->next();
|
|
|
|
if (pos != -1)
|
|
|
|
fprintf(stdout, "Monkey mismatch failed at index %d in monkey pattern.\n", i);
|
|
|
|
}
|
|
|
|
|
|
|
|
cleanup:
|
|
|
|
delete searchIter;
|
|
|
|
return 0;
|
2001-06-20 23:33:30 +00:00
|
|
|
}
|
|
|
|
|