スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C++で全角と半角の混じった文字から1文字ずつ取り出す

今回やりたいことは例えば、"みっくみくにshiteやんよ"という文字列から、"み"や"s"を1文字毎に読み出せるようにすることです。

VisualStudioを使えば簡単にできるのですが、Linuxでは容易にやる方法がなさそうだったので自分で書いてしまいました。

なお、文字コードはUTF-8の場合を想定しています。
文字コードが違う場合は条件式を少しいじる必要があるかと。

ソースコードは続きから↓



#include < sstream >
#include < vector >

using namespace std;

template < class Temp >
string toString(Temp t)
{
stringstream ss;
ss << t;
return ss.str();
}

class StringComparator
{
public:
static vector< string > comparate(string inStr)
{
vector< string > sList; /* 1文字ずつ分けた結果を保持 */
int count = 0; /* 全角文字を読み込み始めてから何回たったか */
char bufC[10]; /* 全角文字保存用 */
bool isLastFULL = false; /* 前回が全角かどうか */

// clear list
sList.clear();

for(int i=0;i < inStr.length(); i++)
{
// 今回が半角
if(inStr.at(i) > 0)
{
// 前回が全角
if(isLastFULL)
{
bufC[count] = '\0';
sList.push_back( toString(bufC) );
}

// リストに追加
sList.push_back( toString(inStr.at(i)) );

isLastFULL = false;
count = 0;
}

// 今回が半角
else
{
if(count == 3)
{
bufC[count] = '\0';
sList.push_back( toString(bufC) );
count = 0;
}

isLastFULL = true;
bufC[count++] = inStr.at(i);
}
}

// 最後の文字が全角だったときの処理
if(isLastFULL)
{
bufC[count] = '\0';
sList.push_back( toString(bufC) );
}

return sList;
}
};




使うときは、以下ように書けばOKです。


#include "StringComparator.hpp"

int main()
{
vector< string > sList = StringComparator::comparate("みっくみくにshiteやんよ");


for(int i=0;i < sList.size();i++)
{
printf("%d %s\n", i, sList[i].c_str());
}

return 0;
}
関連記事

comment

Secret

プロフィール

シロマ=ナノ

Author:シロマ=ナノ
参加予定イベント:
 ・C91 3日目西め28a

DIVA-AC:
 LV.199 白のシンフォニア

Flashカレンダー
Twitter
カテゴリ
最新記事
PCLクレジット
当ブログは、ピアプロ・キャラクター・ライセンス(http://piapro.jp/license/pcl)に基づいて、クリプトン・フューチャー・メディア株式会社のキャラクター 「初音ミク」「鏡音リン」「鏡音レン」「巡音ルカ」「Meiko」「Kaito」及びそれらに依拠して制作されたキャラクター「亞北ネル」「弱音ハク」を描いた作品を公開しています。
アクセスカウンター
検索フォーム
主な作品
WindowHelper(フリーソフト)
WindowHelperポップ

描いた絵・イラスト
リンク
バナー
当サイトはリンクフリーです。
バナーを使用したい場合は以下の画像をお使い下さい。
(リンク先に200x40サイズを置いてあります)

・通常版
banner

・ミク版
banner
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。