C examples for Data Type:Wide Character
Finding occurrences of one wide character string in another
#include <stdio.h> #include <wchar.h> #include <wctype.h> #define TEXT_SIZE 100/*w ww . j ava 2 s. c om*/ #define SUBSTR_SIZE 40 wchar_t *wstr_towupper(wchar_t *wstr, size_t size); // Wide string to uppercase int main(void) { wchar_t text[TEXT_SIZE]; // Input buffer for string to be searched wchar_t substr[SUBSTR_SIZE]; // Input buffer for string sought wprintf(L"Enter the string to be searched (less than %d characters):\n", TEXT_SIZE); fgetws(text, TEXT_SIZE, stdin); wprintf(L"\nEnter the string sought (less than %d characters):\n", SUBSTR_SIZE); fgetws(substr, SUBSTR_SIZE, stdin); // Overwrite the newline character in each string int textlen = wcsnlen(text, sizeof(text)/sizeof(wchar_t)); int substrlen = wcsnlen(substr, sizeof(substr)/sizeof(wchar_t)); text[--textlen] = L'\0'; substr[--substrlen] = L'\0'; fwprintf(stdout, L"\nFirst string entered:\n%ls\n", text); fwprintf(stdout, L"Second string entered:\n%ls\n", substr); // Convert both strings to uppercase wstr_towupper(text, sizeof(text)/sizeof(wchar_t)); wstr_towupper(substr, sizeof(substr)/sizeof(wchar_t)); // Count the appearances of substr in text wchar_t *pwstr = text; int count = 0; while((pwstr < text + textlen - substrlen) && (pwstr = wcsstr(pwstr, substr))){ ++count; pwstr += substrlen; } wprintf(L"The second string %ls found in the first%ls", count ? L"was" : L"was not", count ? L" " : L".\n"); if(count) wprintf(L"%d times.\n",count); return 0; } // Convert a wide string to uppercase wchar_t *wstr_towupper(wchar_t *wstr, size_t size){ for(size_t i = 0 ; i < wcsnlen(wstr, size) ; ++i) wstr[i] = towupper(wstr[i]); return wstr; }