馬賽克

  一般網路遊戲為了不讓玩家說一些敏感話題,或是防止玩家罵髒話讓他人感到不悅,亦或是冒充遊戲管理者進行詐騙,都會把許多字元設定成需要過濾的文字。

  底下就是一段能把需要過濾的文字替換掉的一個函式:

 

bool WordFilter(  const std::wstring &Input, std::wstring &Output, 
		 const std::wstring &ReplaceString )
{
	bool bHasReplaced = false;
	std::wstring::size_type uPos = 0;
	std::wstring wsInputString = Input

	if ( wsInputString.size() != 0 && m_vFilteredWord.size() != 0 )
	{	
		std::vector::iterator it;
		for (it = m_vFilteredWord.begin(); it != m_vFilteredWord.end(); it++)
		{
			if ( wsInputString.length() >= (*it).length() )
			{
				uPos = wsInputString.find(*it);
				while ( uPos != std::wstring::npos )
				{
					wsInputString.replace(  uPos, (*it).length(), 
								ReplaceString );
					uPos = wsInputString.find(*it);

					if ( !bHasReplaced )
						bHasReplaced = true;
				}
			}
		}
	}
	if ( bHasReplaced )
	{
		Output.assign( wsInputString );
	}
	return bHasReplaced;
}

 

  一開始的輸入參數依序為:玩家輸入的字串,替換後的字串,準備拿來替換過濾字眼的字串,在函式裡的 m_vFilteredWord 是一開始就要建立好的需要被過濾的文字 vector ( std::vector<std::wstring> )。

  基本上,只要事先準備一份需要過濾的文字檔案,就可以使用上面的方法了。在有需要過濾的字眼出現時會回傳 true ,否則回傳 false 。

G毛 發表在 痞客邦 PIXNET 留言(0) 人氣()