#include "StdAfx.h" #include "WCStringList.h" static wchar_t * WStrNew(const wchar_t *src) { if (src == NULL) { return NULL; } int len = wcslen(src)+1; wchar_t *res = new wchar_t[len]; memcpy(res, src, len*sizeof(wchar_t)); return res; } WCStringList::WCStringList() { } WCStringList::WCStringList(WCStringList &szSrc) { *this = szSrc; } WCStringList::WCStringList(const wchar_t **pBeg, int nCount) { m_nDelFlag = 1; const wchar_t **p = pBeg; for ( int i = 0; i < nCount; i++) { Append(WStrNew(*p)); p++; } } WCStringList::~WCStringList() { } // 返回符号表的序号: -1表示符号不在列表里 // 不分大小写 int WCStringList::Index(const wchar_t *pBeg, int nCaseSense) { if (!pBeg) { return -1; } int nLen = Length(); if (!nCaseSense) { for (int i = 0; i < nLen; i++) { if (_wcsicmp((*this)[i], pBeg) == 0) { return i; } } } else { for (int i = 0; i < nLen; i++) { if (wcscmp((*this)[i], pBeg) == 0) { return i; } } } return -1; } WCStringList & WCStringList::operator =(WCStringList &szSrc) { Reset(); int nLen = szSrc.Length(); for (int i = 0; i < nLen; i++) { Append(WStrNew(szSrc[i])); } return *this; } typedef int (* WStrCompFun)(const wchar_t *, const wchar_t *); wchar_t * WCStringList::MaxValue(int nCaseSence) { WStrCompFun cmp = nCaseSence ? wcscmp : _wcsicmp; int nLen = Length(); wchar_t *pszRes = NULL; for (int i = 0; i < nLen; i++) { if (!pszRes) { pszRes = (*this)[i]; } else { pszRes = cmp(pszRes,(*this)[i]) >= 0 ? pszRes : (*this)[i]; } } return pszRes; } wchar_t * WCStringList::MinValue(int nCaseSence) { WStrCompFun cmp = nCaseSence ? wcscmp : _wcsicmp; int nLen = Length(); wchar_t *pszRes = NULL; for (int i = 0; i < nLen; i++) { if (!pszRes) { pszRes = (*this)[i]; } else { pszRes= cmp(pszRes,(*this)[i]) <= 0 ? pszRes : (*this)[i]; } } return pszRes; }