在一个字符串中查找一个宽字符串的出现次数

#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(LEnter 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, LSecond 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(LThe second string %ls found in the first%ls, count ? Lwas : Lwas 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐