亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stringex.cpp

?? 一個c++實現的acd的例子。 ----ACDCommandListener.cpp ---ACDCommandListenerThread.cpp ---ACDConfig.cpp ---a
?? CPP
字號:

#include "sfc.h"
#include "StringEx.h"

#if defined(_DEBUG)
//#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



/////////////////////////////////////////////////////////////////////////
// StringEx

void StringEx::MakeUpper ()
{
   // reverse case of string
   for( iterator p = begin(); p != end(); p++ )
   {
      if( islower( *p ) )
         *p = _toupper( *p );
   }

}


void StringEx::MakeLower ()
{
   // reverse case of string
   for( iterator p = begin(); p != end(); p++ )
   {
      if( isupper( *p ) )
         *p = _tolower( *p );
   }

}


// format a string
void StringEx::Format ( LPCTSTR lpszFormat, ... )
{
	va_list args;
	va_start(args, lpszFormat);

	// buffer for format
	int   len;
	TCHAR buffer[512] = _T("\0");

	// perform format
	len = _vsntprintf(buffer, 512, lpszFormat, args);

	// if there was no error
	if ( len >= 0 )
		(string &) *this = buffer;

	va_end(args);
}


// load string resource

void StringEx::LoadString ( int id )
{
	int   len;
	TCHAR buffer[512];

	// load resource string
	// need to examinie instance

	/*
	#if defined(__AFX_H__)
	HINSTANCE hInstance = AfxGetInstanceHandle();
	#elif defined(__ATLBASE_H__)
	HINSTANCE hInstance = _Module.GetModuleInstance();
	#else
	HINSTANCE hInstance = 0;
	#endif
	*/

	// get default instance
	HINSTANCE hInstance = 0;

	len = 
	::LoadString( hInstance, id, buffer, 512 );
	
	DWORD error = 0;
	if ( len <= 0 )
		error = GetLastError();


	// if there was no error
	if ( len >= 0 )
		(string &) *this = buffer;
}




// trim white space
void StringEx::TrimRight ()
{
	// find last that is not a space
	reverse_iterator last = std::find_if( rbegin(), rend(), std::bind2nd(std::not_equal_to<TCHAR>(),' ') );

	// remove spaces from end (here we use the knowledge that a reverse_terator 
	// is based on an iterator refer include file xstring
	erase( (iterator &) last, end() );
}



int StringEx::Compare(LPCTSTR lpsz) const
{
	// if nothing in string stop
	if ( empty() )
		return -1;

	// do comparison
	int result = compare(lpsz);

	return result;
}

int StringEx::Compare(TCHAR ch) const
{
	// if nothing in string stop
	if ( empty() )
		return -1;

	// do comparison
	TCHAR temp[] = {ch};
	int result = compare(temp);

	return result;
}

int StringEx::CompareNoCase(LPCTSTR lpsz) const
{
	// if nothing in string stop
	if ( empty() )
		return -1;


	return lstrcmpi(begin(), lpsz); 
} 



void StringEx::TrimLeft  ()
{
	// find first that is not space
	iterator last  = std::find_if( begin(), end(), std::bind2nd(std::not_equal_to<TCHAR>(),' ') );

	// remove spaces from start
	erase(begin(),last) ;
}



void StringEx::TrimRight(TCHAR chTarget)
{
	// find last that is not a space
	reverse_iterator last = std::find_if( rbegin(), rend(), std::bind2nd(std::not_equal_to<TCHAR>(),chTarget) );

	// remove spaces from end (here we use the knowledge that a reverse_terator 
	// is based on an iterator refer include file xstring
	erase( (iterator &) last, end() );
}

void StringEx::TrimRight(LPCTSTR lpszTargets)
{
	// find last that is not a space
	reverse_iterator last = std::find_if( rbegin(), rend(), std::bind2nd(std::not_equal_to<TCHAR>(),lpszTargets) );

	// remove spaces from end (here we use the knowledge that a reverse_terator 
	// is based on an iterator refer include file xstring
	erase( (iterator &) last, end() );
}

void StringEx::TrimLeft(TCHAR chTarget)
{
	// find first that is not space
	iterator last  = std::find_if( begin(), end(), std::bind2nd(std::not_equal_to<TCHAR>(),chTarget) );

	// remove spaces from start
	erase(begin(),last) ;
}

void StringEx::TrimLeft(LPCTSTR lpszTargets)
{
	// find first that is not space
	iterator last  = std::find_if( begin(), end(), std::bind2nd(std::not_equal_to<TCHAR>(),lpszTargets) );

	// remove spaces from start
	erase(begin(),last) ;
}


int StringEx::Replace(TCHAR chOld, TCHAR chNew)
{
	// replace if found
	replace( begin(), end(), chOld, chNew );

	return 0;
}

int StringEx::Replace(LPCTSTR lpszOld, LPCTSTR lpszNew)
{
	// replace if found
	replace( begin(), end(), lpszOld, lpszNew );

	return 0;
}

int StringEx::Remove(TCHAR chRemove)
{
	// remove if found
	std::remove_if( begin(), end(), std::bind2nd(std::equal_to<TCHAR>(),chRemove) );


	return 0;
}

int StringEx::Insert(int nIndex, TCHAR ch)
{
	// find start
	iterator start = begin() + nIndex;
	if ( start == end() )
		return 0;

	// insert char
	insert( start, ch );


	return 0;
}

int StringEx::Insert(int nIndex, LPCTSTR pstr)
{
	// find start
	iterator start = begin() + nIndex;
	if ( start == end() )
		return 0;

	// insert string
	insert( nIndex, pstr );

	return 0;
}

int StringEx::Delete(int nIndex, int nCount)
{
	// find start
	iterator start = begin() + nIndex;
	if ( start == end() )
		return 0;

	iterator last = start + nCount;
	if ( last == end() )
		return 0;

	// remove chars
	erase( start, last );

	return 0;
}


void StringEx::allocCopy ( StringEx & dest, int copyLen, int copyIndex,
				            int extraLen ) const
{
	// will clone the data attached to this string
	// allocating 'nExtraLen' characters
	// Places results in uninitialized string 'dest'
	// Will copy the part or all of original data to start of new string

	int newLen = copyLen + extraLen;
	if ( newLen == 0 )
	{	
		dest = "";
	}
	else
	{
		// get allocator for string
		StringEx::allocator_type allocator = 
		dest.get_allocator();

		// setup buffer for copy
		allocator.allocate( newLen, NULL );

		// copy data
		TCHAR * pData = (TCHAR *) c_str();

		memcpy( (TCHAR *) dest.c_str(), 
			    pData + copyIndex, 
				copyLen * sizeof(TCHAR) );
	}
}


StringEx StringEx::Mid(int first) const
{
	return Mid(first, size() - first);
}

StringEx StringEx::Mid(int first, int count) const
{
	// out-of-bounds requests return sensible things
	if (first < 0)
		first = 0;
	if (count < 0)
		count = 0;

	if ( first + count > size() )
		count = size() - first;
	if ( first > size() )
		count = 0;

#ifdef _DEBUG
	if(!(first >= 0))
		throw 1;
	if(!(first + count <= size()))
		throw 1;
#endif	// _DEBUG

	// optimize case of returning entire string
	if ( first == 0 && first + count == size() )
		return *this;

	StringEx dest;
	allocCopy(dest, count, first, 0);
	return dest;
}

StringEx StringEx::Right(int count) const
{
	if (count < 0)
		count = 0;
	if (count >= size())
		return *this;

	StringEx dest;
	allocCopy( dest, count, size()-count, 0 );
	return dest;
}

StringEx StringEx::Left ( int count ) const
{
	if ( count < 0 )
		count = 0;
	if ( count >= size() )
		return *this;

	StringEx dest;
	allocCopy(dest, count, 0, 0);
	return dest;
}

// strspn equivalent
StringEx StringEx::SpanIncluding ( LPCTSTR charSet ) const
{
	// get data
	TCHAR * pData = (TCHAR *) c_str();

	return Left(_tcsspn(pData, charSet));
}

// strcspn equivalent
StringEx StringEx::SpanExcluding ( LPCTSTR charSet ) const
{
	// get data
	TCHAR * pData = (TCHAR *) c_str();

	return Left(_tcscspn(pData, charSet));
}



void StringEx::operator = ( LPWSTR wstr )
{
	// get buffer
	long   len    = wcslen(wstr);
	char * buffer = new char[len+1];
	
	if ( buffer )
	{
		wcstombs( buffer, wstr, len );
		((string &) *this) = buffer;
		delete [] buffer;
	}
}


void StringEx::operator += ( LPWSTR wstr )
{
	// get buffer
	long   len    = wcslen(wstr);
	char * buffer = new char[len+1];
	
	if ( buffer )
	{
		wcstombs( buffer, wstr, len );
		((string &) *this) += buffer;
		delete [] buffer;
	}
}

////////////////////////////////////////////////////////////////////////////////////////
// StringList

void StringList::getEmbeddedStr ( string & embeddedStr )
{
	// clear embedded string
	embeddedStr = "";

	// get ptr to list
	string str;

	// copy list
	for ( iterator item = begin(); item != end(); item++ )
	{
		// get string
		str = *item;

		// copy string
		embeddedStr += str;
		embeddedStr += '\0';
	}

	// add final null terminator
	embeddedStr += '\0';
}



void StringList::setEmbeddedStr ( string & embeddedStr )
{
	// if nothing then move on
	if ( embeddedStr.empty() )
		return;

	// clear list
	if ( !empty() )
		erase(begin(),end());

	appendEmbeddedStr(embeddedStr);
}


void StringList::appendEmbeddedStr ( string & embeddedStr )
{
	// if nothing then move on
	if ( embeddedStr.empty() )
		return;

	// init from embedded string
	LPTSTR start = (LPTSTR) embeddedStr.c_str();
	LPTSTR end   = start + embeddedStr.size();
	for ( LPTSTR str = (LPTSTR) embeddedStr.c_str(); 
	      *str != '\0'|| str > end;  )
	{
		// copy string
		string tmpStr = str;

		// add it
		push_back(tmpStr);

		// go to next string
		int len = _tcslen(str) + 1;
		str += len;
	}
}


void StringList::operator -= ( StringList & list )
{
	// remove strings from our list that are in
	// list
	StringList result;
	result.resize( size() + list.size() );
	std::set_difference( begin(), end(), 
					list.begin(), list.end(),
					result.begin() );

	*this = result;
}


void StringList::operator += ( StringList & list )
{
	// add strings from list to ours
	StringList result;
	result.resize( size() + list.size() );
	std::set_union( begin(), end(),
			   list.begin(), list.end(),
			   result.begin() );

	*this = result;
}


void StringList::operator = ( StringList & list )
{
	// copy strings
	if ( !empty() )
		clear();
	resize( list.size() );
	std::copy( list.begin(), list.end(), begin() );
}

void StringList::removeDuplicates ()
{
	// remove duplicate strings from list
	for ( iterator item = begin();
	      item != end();
		  item++ )
	{

		// get string
		string & str = *item;

		// start search after this string
		iterator srch = item + 1;
		if ( srch == end() )
			continue;

		// search for it, if found remove it
		iterator found = std::find( srch, end(), str );
		if ( found != end() )
			erase(found);

	}
}









?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波波电影院一区二区三区| 欧美国产精品久久| 91欧美一区二区| 99精品久久只有精品| 成人午夜在线播放| 成人激情电影免费在线观看| 不卡电影一区二区三区| 成人av午夜影院| 色综合久久久久综合体桃花网| www.亚洲人| 欧美自拍偷拍午夜视频| 色94色欧美sute亚洲线路一ni| 欧美最新大片在线看| 777午夜精品免费视频| 日韩欧美一二三| 久久久久成人黄色影片| 国产精品系列在线| 亚洲欧美色图小说| 午夜不卡av免费| 喷白浆一区二区| 国产成人久久精品77777最新版本| 成人天堂资源www在线| 色欧美日韩亚洲| 日韩一区二区在线看片| 日韩精品自拍偷拍| 欧美激情在线观看视频免费| 亚洲综合在线第一页| 秋霞av亚洲一区二区三| 国产在线播放一区| 91在线观看污| 2022国产精品视频| 亚洲男女毛片无遮挡| 蜜臀精品一区二区三区在线观看| 国产91高潮流白浆在线麻豆 | 精品少妇一区二区| 日韩欧美的一区二区| 国产精品电影一区二区三区| 亚洲va天堂va国产va久| 国产成人鲁色资源国产91色综| 99久久精品国产一区二区三区| 欧美日韩一区成人| 日韩精品一区二区在线观看| 亚洲精品视频一区| 成人综合婷婷国产精品久久免费| 不卡一二三区首页| 欧美精品一区二区精品网| 午夜久久久久久电影| 95精品视频在线| 国产欧美精品国产国产专区| 天天av天天翘天天综合网色鬼国产| 国产激情一区二区三区四区 | 欧美一区二区三区视频| 一区二区三区在线观看国产| 国产成人亚洲精品狼色在线 | 国产成人免费9x9x人网站视频| 欧美视频一区二区三区| 国产精品福利一区二区| 亚洲123区在线观看| 91丨porny丨蝌蚪视频| 久久久亚洲综合| 亚洲影视资源网| 色先锋aa成人| 亚洲猫色日本管| 97精品久久久久中文字幕| 久久久国际精品| 国产成人福利片| 久久久夜色精品亚洲| 免费高清视频精品| 日韩久久精品一区| 麻豆国产精品777777在线| 欧美裸体一区二区三区| 午夜精品久久久久久久| 欧美日韩视频在线一区二区| 亚洲一区在线播放| 欧美精品高清视频| 奇米四色…亚洲| 久久午夜色播影院免费高清| 国产原创一区二区三区| 日本一区二区久久| 99久久综合色| 亚洲福利一区二区三区| 制服丝袜一区二区三区| 免费在线一区观看| 久久久www成人免费无遮挡大片| 久久99精品一区二区三区三区| 欧美一级在线观看| 日本美女一区二区三区视频| 日韩一二在线观看| 免费不卡在线视频| 欧美va日韩va| 成人免费毛片嘿嘿连载视频| 一区二区高清免费观看影视大全 | 欧美一级片在线| 久久精品国产77777蜜臀| 日韩视频永久免费| 国产一区二区三区高清播放| 国产精品午夜免费| 成人av在线网站| 亚洲国产精品欧美一二99| 精品三级在线看| 色婷婷综合激情| 美腿丝袜在线亚洲一区| 国产精品久99| 欧美浪妇xxxx高跟鞋交| 国产成人免费视频网站| 亚洲大片精品永久免费| 26uuu成人网一区二区三区| 91视频免费观看| 黑人巨大精品欧美黑白配亚洲 | 欧美性色黄大片| 国产一区不卡精品| 亚洲国产乱码最新视频| 国产三级精品视频| 欧美老人xxxx18| 色av综合在线| 国产成人精品三级| 日韩av一区二区三区| 自拍偷在线精品自拍偷无码专区| 欧美日韩精品欧美日韩精品一 | 中日韩av电影| 日韩免费福利电影在线观看| 91久久精品日日躁夜夜躁欧美| 蓝色福利精品导航| 一区二区三区四区乱视频| 国产视频一区二区在线| 日韩一区国产二区欧美三区| 在线看日本不卡| 粉嫩av一区二区三区| 黑人巨大精品欧美一区| 日韩国产在线观看| 午夜伦理一区二区| 亚洲精品成人a在线观看| 国产精品美女一区二区在线观看| 日韩欧美123| 欧美一区二区福利在线| 欧美男同性恋视频网站| 欧美日韩一区三区四区| 在线精品视频小说1| 99久久精品99国产精品| 成+人+亚洲+综合天堂| 国产盗摄一区二区三区| 国产综合一区二区| 精品一区二区久久久| 精品亚洲porn| 激情综合色播激情啊| 久久精品国产一区二区| 美女网站在线免费欧美精品| 蜜臀av在线播放一区二区三区| 亚洲bt欧美bt精品777| 亚洲成a人片在线不卡一二三区| 亚洲激情五月婷婷| 亚洲动漫第一页| 婷婷开心久久网| 美腿丝袜亚洲一区| 国产乱人伦偷精品视频免下载| 九九九精品视频| 国产传媒久久文化传媒| 成人91在线观看| 91久久精品国产91性色tv| 欧美日韩国产综合一区二区 | 麻豆专区一区二区三区四区五区| 午夜精品福利一区二区蜜股av| 性做久久久久久久免费看| 免费在线观看成人| 国内精品国产成人国产三级粉色| 国产大陆精品国产| 色一情一乱一乱一91av| 欧美高清一级片在线| 精品国产一区二区三区久久久蜜月| 欧美精品一区二区三区很污很色的| 久久久一区二区三区捆绑**| 久久精品亚洲精品国产欧美| 亚洲欧洲制服丝袜| 久久精品噜噜噜成人88aⅴ| 国产大片一区二区| 欧美色男人天堂| 久久婷婷色综合| 亚洲欧美日韩在线| 久久不见久久见免费视频1| 成人国产精品免费网站| 欧美狂野另类xxxxoooo| 久久久99精品免费观看| 一区二区三区四区视频精品免费 | 免费观看成人av| 99精品国产视频| 日韩一区二区三区视频在线观看| 久久精品水蜜桃av综合天堂| 亚洲精品国产一区二区精华液 | 玉米视频成人免费看| 日本视频在线一区| 91在线你懂得| 欧美成人一区二区三区| 国产精品女同一区二区三区| 午夜在线电影亚洲一区| 成人ar影院免费观看视频| 日韩一区二区在线播放| 一区二区三区免费| 国产成人精品免费在线| 欧美本精品男人aⅴ天堂| 亚洲在线观看免费视频|