This example uses wcsxfrm to transform two different strings with the same collating weight. It then uses wcscmp to compare the new strings.
#include <stdlib.h> #include <stdio.h> #include <locale.h> #include <wchar.h>
#if (1 == __TOS_OS2__) #define LOCNAME "da_dk.ibm-865" /* OS/2 name */ wchar_t *string1 = L"str\xA0ng1a"; wchar_t *string2 = L"strang1\x83"; #else #define LOCNAME "da_dk.ibm-1252" /* Windows name */ wchar_t *string1 = L"str\xE0ng1a"; wchar_t *string2 = L"strang1\xE2"; #endif
int main(void)
{
wchar_t *newstring1, *newstring2;
size_t length1, length2, pw1, pw2;
if (NULL == setlocale(LC_ALL, LOCNAME)) {
printf("Locale \"%s\" could not be loaded\n", LOCNAME);
exit(1);
}
length1 = wcsxfrm(NULL, string1, 0);
pw1 = (wcslen(string1)/2);
length2 = wcsxfrm(NULL, string2, 0);
pw2 = (wcslen(string2)/2);
if (NULL == (newstring1 = (wchar_t*)calloc(length1 + 1, sizeof(wchar_t))) ||
NULL == (newstring2 = (wchar_t*)calloc(length2 + 1, sizeof(wchar_t)))) {
printf("insufficient memory\n");
exit(1);
}
/* Get primary weight of each string */
if ((wcsxfrm(newstring1, string1, pw1 + 1) != length1) ||
(wcsxfrm(newstring2, string2, pw2 + 1) != length2)) {
printf("error in string processing\n");
exit(1);
}
if (0 != wcscmp(newstring1, newstring2))
printf("wrong results\n");
else
printf("correct results\n");
return 0;
/***************************************************************************
The output should be similar to:
correct results ***************************************************************************/ }