#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
#define TEXT_SIZE 100
#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;
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/266742.html