わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

全角カタカナを半角カタカナに変換する

全角カタカナを半角カタカナに変換する

#include <tchar.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <windows.h>



/*
	全角カタカナを半角カタカナに変換する
*/
std::wstring WStringKanaToHalf
(
	std::wstring oString
)
{
	std::wstring::iterator ite    = oString.begin();
	std::wstring::iterator iteEnd = oString.end();

	while( ite != iteEnd ) {

		if ( ( L'ァ' <= *ite ) && ( L'オ' >= *ite ) ) {
			if ( *ite & 1 ) {
				*ite = L'ァ' + ( *ite - L'ァ' ) / 2;
			}
			else {
				*ite = L'ア' + ( *ite - L'ア' ) / 2;
			}
		}
		else 
		if ( ( L'ャ' <= *ite ) && ( L'ヨ' >= *ite ) ) {
			if ( *ite & 1 ) {
				*ite = L'ャ' + ( *ite - L'ャ' ) / 2;
			}
			else {
				*ite = L'ヤ' + ( *ite - L'ヤ' ) / 2;
			}
		}
		else if ( ( L'カ' <= *ite ) && ( L'コ' >= *ite ) ) {
			*ite = L'カ' + ( *ite - L'カ' ) / 2;
		}
		else if ( ( L'サ' <= *ite ) && ( L'ソ' >= *ite ) ) {
			*ite = L'サ' + ( *ite - L'サ' ) / 2;
		}
		else if ( L'タ' == *ite ) {
			*ite = L'タ';
		}
		else if ( L'チ' == *ite ) {
			*ite = L'チ';
		}
		else if ( ( L'ツ' <= *ite ) && ( L'ト' >= *ite ) ) {
			*ite = L'ツ' + ( *ite - L'ツ' ) / 2;
		}
		else if ( ( L'ナ' <= *ite ) && ( L'ノ' >= *ite ) ) {
			*ite = L'ナ' + ( *ite - L'ナ' );
		}
		else if ( L'ー' == *ite ) {
			*ite = L'ー';
		}
		else if ( L'ハ' == *ite ) {
			*ite = L'ハ';
		}
		else if ( L'ヒ' == *ite ) {
			*ite = L'ヒ';
		}
		else if ( L'フ' == *ite ) {
			*ite = L'フ';
		}
		else if ( L'ヘ' == *ite ) {
			*ite = L'ヘ';
		}
		else if ( L'ホ' == *ite ) {
			*ite = L'ホ';
		}
		else if ( ( L'マ' <= *ite ) && ( L'モ' >= *ite ) ) {
			*ite = L'マ' + ( *ite - L'マ' );
		}
		else if ( ( L'ヤ' <= *ite ) && ( L'ヨ' >= *ite ) ) {
			*ite = L'ヤ' + ( *ite - L'ヤ' ) / 2;
		}
		else if ( ( L'ラ' <= *ite ) && ( L'ロ' >= *ite ) ) {
			*ite = L'ラ' + ( *ite - L'ラ' );
		}
		else if ( L'ワ' == *ite ) {
			*ite = L'ワ';
		}
		else if ( L'ヲ' == *ite ) {
			*ite = L'ヲ';
		}
		else if ( L'ン' == *ite ) {
			*ite = L'ン';
		}
		else if ( L'゛' == *ite ) {
			*ite = L'゙';
		}
		else if ( L'゜' == *ite ) {
			*ite = L'゚';
		}

		// 次の文字へ
		ite++;
	}

	// 正常終了
	return( oString );
}



/*
	全角カタカナを半角カタカナに変換する
*/
int _tmain
(
	  int argc
	, _TCHAR* argv[]
)
{
	// 標準出力へユニコードを出力する
	setlocale( LC_ALL, "Japanese" );

	// 全角カタカナを半角カタカナに変換する
	std::wstring oResultStr = WStringKanaToHalf( L"アイウエオ" );

	// 結果を表示
	std::wcout << oResultStr.c_str() << std::endl;

	// 正常終了
	return( 0 );
}

実行結果

アイウエオ






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。