Standards / Extensions | C or C++ | Dependencies |
---|---|---|
Language Environment |
both |
#include <collate.h>
collel_t strtocoll(char *s);
Determines whether the string pointed to by s represents the valid element as defined in the LC_COLLATE category of the current locale.
If a string pointed to by s contains only one character, the collating element representing this character always exists. Otherwise, a valid collating element exists if the LC_COLLATE category contains the definition of a sequence of characters that collate as one for the purpose of culture-sensitive string comparison. This many-characters-to-one-collating element relation is also called many-to-one mapping.
The type collel_t represents the collating elements.
If many-to-one mapping is not defined in the LC_COLLATE of the current locale, strtocoll() returns (collel_t)-1.
Also, if the string is not a valid collating element or is of zero length, strtocoll() returns (collel_t)-1.
⁄* CELEBS52
This example uses the strtocoll() function to get the
collel_t value for the start and end collating-elements for
the collrange() function.
*⁄
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <collate.h>
#include <wchar.h>
#include <wctype.h>
main(int argc, char *argv[]) {
collel_t s, e, *rp;
int i;
setlocale(LC_ALL, "");
if ((s = strtocoll(argv[1])) == (collel_t)-1) {
printf("%s collating element not defined\n", argv[1]);
exit(1);
}
if ((e = strtocoll(argv[2])) == (collel_t)-1) {
printf("%s collating element not defined\n", argv[2]);
exit(1);
}
if ((i = collrange(s, e, &rp)) == -1) {
printf("Invalid range for %s to %s\n", argv[1], argv[2]);
exit(1);
}
for (; i-- > 0; rp++) {
if (ismccollel(*rp))
printf("'%s' ", colltostr(*rp));
else if (iswprint(*rp))
printf("'%lc' ", *rp);
else
printf("'%x' ", *rp);
}
}