/
usr
/
share
/
doc
/
libicu-devel
/
samples
/
citer
/
/usr/share/doc/libicu-devel/samples/citer
mkdir
upload
Name
Size
Mode
Actions
citer.cpp
5548
0644
edit
dl
rm
citer.vcxproj
7905
0644
edit
dl
rm
citer.vcxproj.filters
900
0644
edit
dl
rm
Makefile
620
0644
edit
dl
rm
readme.txt
2222
0644
edit
dl
rm
Edit:
/usr/share/doc/libicu-devel/samples/citer/citer.cpp
(5548B)
/* ******************************************************************************* * * © 2016 and later: Unicode, Inc. and others. * License & terms of use: http://www.unicode.org/copyright.html#License * ******************************************************************************* ******************************************************************************* * * Copyright (C) 2002-2011, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* */ #include "unicode/uchriter.h" #include "unicode/schriter.h" #include "unicode/ustring.h" #include <stdio.h> #include <unicode/brkiter.h> #include <unicode/ustdio.h> #include <stdlib.h> static UFILE *out; using icu::CharacterIterator; using icu::StringCharacterIterator; using icu::UCharCharacterIterator; using icu::UnicodeString; void printUnicodeString(const UnicodeString &s) { u_fprintf(out, "%S", &s); } void printUChar(UChar32 ch) { if(ch < 127) { u_fprintf(out, "%C", (UChar) ch); } else if (ch == CharacterIterator::DONE) { u_fprintf(out, "[CharacterIterator::DONE = 0xFFFF]"); } else { u_fprintf(out, "[%X]", ch); } } class Test { public: void TestUChariter(); void TestStringiter(); }; void Test::TestUChariter() { const char testChars[] = "Now is the time for all good men to come " "to the aid of their country."; UnicodeString testString(testChars,""); const UChar *testText = testString.getTerminatedBuffer(); UCharCharacterIterator iter(testText, u_strlen(testText)); UCharCharacterIterator* test2 = iter.clone(); u_fprintf(out, "testText = %s", testChars); if (iter != *test2 ) { u_fprintf(out, "clone() or equals() failed: Two clones tested unequal\n"); } UnicodeString result1, result2; // getting and comparing the text within the iterators iter.getText(result1); test2->getText(result2); if (result1 != result2) { u_fprintf(out, "iter.getText() != clone.getText()\n"); } u_fprintf(out, "\n"); // Demonstrates seeking forward using the iterator. u_fprintf(out, "Forward = "); UChar c = iter.first(); printUChar(c); // The first char int32_t i = 0; if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { u_fprintf(out, "startIndex() or endIndex() failed\n"); } // Testing forward iteration... do { if (c == CharacterIterator::DONE && i != u_strlen(testText)) { u_fprintf(out, "Iterator reached end prematurely"); } else if (c != testText[i]) { u_fprintf(out, "Character mismatch at position %d\n" + i); } if (iter.current() != c) { u_fprintf(out, "current() isn't working right"); } if (iter.getIndex() != i) { u_fprintf(out, "getIndex() isn't working right\n"); } if (c != CharacterIterator::DONE) { c = iter.next(); i++; } u_fprintf(out, "|"); printUChar(c); } while (c != CharacterIterator::DONE); delete test2; u_fprintf(out, "\n"); } void Test::TestStringiter() { const char testChars[] = "Now is the time for all good men to come " "to the aid of their country."; UnicodeString testString(testChars,""); const UChar *testText = testString.getTerminatedBuffer(); StringCharacterIterator iter(testText, u_strlen(testText)); StringCharacterIterator* test2 = iter.clone(); if (iter != *test2 ) { u_fprintf(out, "clone() or equals() failed: Two clones tested unequal\n"); } UnicodeString result1, result2; // getting and comparing the text within the iterators iter.getText(result1); test2->getText(result2); if (result1 != result2) { u_fprintf(out, "getText() failed\n"); } u_fprintf(out, "Backwards: "); UChar c = iter.last(); int32_t i = iter.endIndex(); printUChar(c); i--; // already printed out the last char if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { u_fprintf(out, "startIndex() or endIndex() failed\n"); } // Testing backward iteration over a range... do { if (c == CharacterIterator::DONE) { u_fprintf(out, "Iterator reached end prematurely\n"); } else if (c != testText[i]) { u_fprintf(out, "Character mismatch at position %d\n", i); } if (iter.current() != c) { u_fprintf(out, "current() isn't working right\n"); } if (iter.getIndex() != i) { u_fprintf(out, "getIndex() isn't working right [%d should be %d]\n", iter.getIndex(), i); } if (c != CharacterIterator::DONE) { c = iter.previous(); i--; } u_fprintf(out, "|"); printUChar(c); } while (c != CharacterIterator::DONE); u_fprintf(out, "\n"); delete test2; } /* Creating and using text boundaries */ int main( void ) { UErrorCode status = U_ZERO_ERROR; out = u_finit(stdout, NULL, NULL); u_fprintf(out, "ICU Iteration Sample Program (C++)\n\n"); Test t; u_fprintf(out, "\n"); u_fprintf(out, "Test::TestUCharIter()\n"); t.TestUChariter(); u_fprintf(out, "-----\n"); u_fprintf(out, "Test::TestStringchariter()\n"); t.TestStringiter(); u_fprintf(out, "-----\n"); return 0; }
Save
cmd:
run