# wchar

***

**1. Wide Character String Literals:**

```cpp
wchar_t wtext[] = L"Wide character string literal";
```

**2. Wide Character String Assignment:**

```cpp
wchar_t wchar = L'a';
wchar_t* wstr = L"Wide character string";
```

**3. Wide Character String Concatenation:**

```cpp
wchar_t wstr1[] = L"Hello";
wchar_t wstr2[] = L" world";
wcscat(wstr1, wstr2); // wstr1 now contains "Hello world"
```

**4. Wide Character String Comparison:**

```cpp
wchar_t wstr1[] = L"Hello";
wchar_t wstr2[] = L"world";
if (wcscmp(wstr1, wstr2) < 0) {
  // wstr1 is less than wstr2
}
```

**5. Wide Character String Length:**

```cpp
wchar_t wstr[] = L"Wide character string";
int len = wcslen(wstr);
```

**6. Wide Character String Copy:**

```cpp
wchar_t wdest[] = L"Destination";
wchar_t* wdest_copy = wcscpy(wdest, wsrc);
```

**7. Wide Character String Conversion from Multibyte String:**

```cpp
char* mbyte_str = "Multibyte string";
wchar_t* wchar_str = mbstowcs(mbyte_str, L_MAX_LEN);
```

**8. Wide Character String Conversion to Multibyte String:**

```cpp
wchar_t* wchar_str = L"Wide character string";
char* mbyte_str = wcstombs(wchar_str, L_MAX_LEN);
```

**9. Wide Character String Output Using wcout:**

```cpp
wcout << L"Wide character string output using wcout" << endl;
```

**10. Wide Character String Input Using wcin:**

```cpp
wchar_t wstr[BUF_SIZE];
wcin >> wstr;
```

**11. Wide Character String Formatted Input/Output Using wprintf/wsprintf:**

```cpp
wchar_t wformat[] = L"%s %d %f";
wchar_t wstr[BUF_SIZE];
wsprintf(wstr, wformat, "Wide string", 100, 3.14);
wprintf(L"Formatted wide character string: %s\n", wstr);
```

**12. Wide Character String Formatted Input/Output Using swscanf/swprintf:**

```cpp
wchar_t winput[] = L"Wide string 100 3.14";
int num;
double real;
swscanf(winput, L"%s %d %lf", &num, &real);
wchar_t woutput[BUF_SIZE];
swprintf(woutput, L"Formatted wide character string: %s %d %f\n", winput, num, real);
wprintf(woutput);
```

**13. Wide Character String Search:**

```cpp
wchar_t wstr[] = L"Wide character string";
wchar_t* found = wcschr(wstr, L'c');
```

**14. Wide Character String Replace:**

```cpp
wchar_t wstr[] = L"Wide character string";
wchar_t* wreplace = wcspbrk(wstr, L"act");
*wreplace = L'z';
```

**15. Wide Character String Split:**

```cpp
wchar_t wstr[] = L"Wide,character,string";
wchar_t* wtokens[MAX_TOKENS];
int num_tokens = wcstok(wstr, L",", wtokens);
```

**16. Wide Character String Tokenization:**

```cpp
wchar_t wstr[] = L"Wide character string";
wchar_t* wtok = wcstok(wstr, L" ", NULL);
while (wtok != NULL) {
  // Process each token
  wtok = wcstok(NULL, L" ", NULL);
}
```

**17. Wide Character String Conversion to Integer:**

```cpp
wchar_t wstr[] = L"100";
int num = wcstol(wstr, NULL, 10);
```

**18. Wide Character String Conversion to Float:**

```cpp
wchar_t wstr[] = L"3.14";
double real = wcstod(wstr, NULL);
```

**19. Wide Character String Conversion to ASCII:**

```cpp
wchar_t wchar = L'a';
char c = (char)wchar;
```

**20. Wide Character String Conversion from ASCII:**

```cpp
char c = 'a';
wchar_t wchar = (wchar_t)c;
```

**21. Wide Character String Comparison Ignoring Case:**

```cpp
wchar_t wstr1[] = L"Hello";
wchar_t wstr2[] = L"hello";
int result = wcscasecmp(wstr1, wstr2); // result will be 0
```

**22. Wide Character String Conversion to Lowercase:**

```cpp
wchar_t wstr[] = L"Wide Character String";
_wcslwr(wstr); // wstr now contains "wide character string"
```

**23. Wide Character String Conversion to Uppercase:**

```cpp
wchar_t wstr[] = L"Wide Character String";
_wcsupr(wstr); // wstr now contains "WIDE CHARACTER STRING"
```

**24. Wide Character String Whitespace Trimming:**

```cpp
wchar_t wstr[] = L"   Wide Character String    ";
_wcsdec(wstr, L'\0'); // Remove trailing whitespace
_wcsinc(wstr, L'\0'); // Remove leading whitespace
```

**25. Wide Character String Reverse:**

```cpp
wchar_t wstr[] = L"Wide Character String";
_wcsrev(wstr); // wstr now contains "gnirts rehtaC ediw"
```

**26. Wide Character String Find First of:**

```cpp
wchar_t wstr[] = L"Wide Character String";
wchar_t* found = wcschr(wstr, L'r');
```

**27. Wide Character String Find Last of:**

```cpp
wchar_t wstr[] = L"Wide Character String";
wchar_t* found = wcsrchr(wstr, L'r');
```

**28. Wide Character String Find Substring:**

```cpp
wchar_t wstr[] = L"Wide Character String";
wchar_t* found = wcsstr(wstr, L"Character");
```

**29. Wide Character String Find and Replace:**

```cpp
wchar_t wstr[] = L"Wide Character String";
wchar_t* found = wcsstr(wstr, L"Character");
if (found != NULL) {
  *found = L'X';
}
```

**30. Wide Character String Replace All:**

```cpp
wchar_t wstr[] = L"Wide Character String";
wchar_t* found;
while ((found = wcsstr(wstr, L"Character")) != NULL) {
  *found = L'X';
}
```

**31. Wide Character String Split into Tokens:**

```cpp
const wchar_t* wstr = L"Wide Character String";
wchar_t* tokens[MAX_TOKENS];
int num_tokens = 0;
for (wchar_t* token = wcstok((wchar_t*)wstr, L" ", &wstr); token != NULL; token = wcstok(NULL, L" ", &wstr)) {
  tokens[num_tokens++] = token;
}
```

**32. Wide Character String Join Tokens:**

```cpp
const wchar_t* tokens[] = {L"Wide", L"Character", L"String"};
const int num_tokens = sizeof(tokens) / sizeof(wchar_t*);
wchar_t wstr[MAX_SIZE] = L"";
for (int i = 0; i < num_tokens; i++) {
  wcscat(wstr, tokens[i]);
  if (i < num_tokens - 1) {
    wcscat(wstr, L" ");
  }
}
```

**33. Wide Character String Convert to UTF-8:**

```cpp
wchar_t* wstr = L"Wide Character String";
char* utf8_str = wctomb(wstr);
```

**34. Wide Character String Convert from UTF-8:**

```cpp
char* utf8_str = "Wide Character String";
wchar_t* wstr = wctomb(utf8_str);
```

**35. Wide Character String Compare Case-Insensitive:**

```cpp
wchar_t wstr1[] = L"Wide Character String";
wchar_t wstr2[] = L"WIDE CHARACTER STRING";
int result = wcsicmp(wstr1, wstr2); // result will be 0
```

**36. Wide Character String Convert to Digit:**

```cpp
wchar_t wchar = L'5';
int digit = wchar - L'0'; // digit = 5
```

**37. Wide Character String Convert from Digit:**

```cpp
int digit = 5;
wchar_t wchar = digit + L'0'; // wchar = L'5'
```

**38. Wide Character String Check if Alphabetical:**

```cpp
wchar_t wchar = L'a';
int is_alpha = iswalpha(wchar); // is_alpha = 1 (true)
```

**39. Wide Character String Check if Digit:**

```cpp
wchar_t wchar = L'5';
int is_digit = iswdigit(wchar); // is_digit = 1 (true)
```

**40. Wide Character String Check if Space:**

```cpp
wchar_t wchar = L' ';
int is_space = iswspace(wchar); // is_space = 1 (true)
```

**41. Wide Character String Check if Uppercase:**

```cpp
wchar_t wchar = L'A';
int is_upper = iswupper(wchar); // is_upper = 1 (true)
```

**42. Wide Character String Check if Lowercase:**

```cpp
wchar_t wchar = L'a';
int is_lower = iswlower(wchar); // is_lower = 1 (true)
```

**43. Wide Character String Convert to Title Case:**

```cpp
wchar_t wstr[] = L"wide character string";
towupper(wstr); // wstr now contains "Wide Character String"
```

**44. Wide Character String Convert to Lowercase:**

```cpp
wchar_t wstr[] = L"WIDE CHARACTER STRING";
towlower(wstr); // wstr now contains "wide character string"
```

**45. Wide Character String Calculate Length:**

```cpp
wchar_t wstr[] = L"Wide Character String";
size_t length = wcslen(wstr); // length = 20
```

**46. Wide Character String Calculate Memory Size:**

```cpp
wchar_t wstr[] = L"Wide Character String";
size_t size = wcslen(wstr) * sizeof(wchar_t); // size = 100
```

**47. Wide Character String Create and Initialize:**

```cpp
wchar_t* wstr = wcsdup(L"Wide Character String");
```

**48. Wide Character String Copy:**

```cpp
wchar_t* wstr_copy = wcscpy(wstr, L"Wide Character String Copy");
```

**49. Wide Character String N-Copy:**

```cpp
wchar_t wstr_copy[BUF_SIZE];
wcsncpy(wstr_copy, wstr, 10); // Copy only the first 10 characters
```

**50. Wide Character String Concatenate:**

```cpp
wchar_t wstr1[] = L"Wide Character String 1";
wchar_t wstr2[] = L"Wide Character String 2";
wchar_t wstr_concat[BUF_SIZE];
wcscat(wstr_concat, wstr1);
wcscat(wstr_concat, L" ");
wcscat(wstr_concat, wstr2); // wstr_concat now contains "Wide Character String 1 Wide Character String 2"
```
