テキストデータに
"左","1","2","3","4","5"
"中","1","2","3","4","5"
"右","1","2","3","4","5"
"左","1","2","3","4","5"
"中","1","2","3","4","5"
"右","1","2","3","4","5"
とありこれを
vector<string> m_tokens;
の中に一括で文字列配列としていれています。※カンマは入っていません
そこで
vector<string> m_tokens_l;
vector<string> m_tokens_m;
vector<string> m_tokens_r;
として
for(u_int i=0; i<m_tokens.size(); i++)
左が入っている行なら
m_tokens_l.pusu_back(m_tokens[i]);
中が入っている行なら
m_tokens_m.pusu_back(m_tokens[i]);
右が入っている行なら
m_tokens_r.pusu_back(m_tokens[i]);
としていきたいのですが
if(i<6*1)
m_tokens_l.pusu_back(m_tokens[i]);
else if(i<6*2)
m_tokens_m.pusu_back(m_tokens[i]);
else if(i<6*3)
m_tokens_r.pusu_back(m_tokens[i]);
・・・
とはしていきたくないので
なんかいい方法としてどなたかご教授お願いします
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは。
大分強引ですが、参考程度に。#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#define ArrayCount(a) (sizeof(a)/sizeof(a[0]))
#define ArrayEnd(a) (a + ArrayCount(a))
class Class
{
typedef std::vector<std::string> string_vector;
static const string_vector init()
{
const std::string s[] =
{
"左123456",
"中123456",
"右123456",
"左123456",
"中123456",
"右123456"
};
return string_vector(s, ArrayEnd(s));
}
static void callback(Class* pThis, const std::string& sToken)
{
pThis->dispatch(sToken);
}
public:
Class() : m_tokens(init())
{
typedef std::pointer_to_binary_function<Class*, const std::string&, void> PtrBinFun;
std::for_each(m_tokens.begin(), m_tokens.end(), std::bind1st(PtrBinFun(&callback), this));
}
~Class()
{
}
void print()
{
typedef std::pair<std::string, string_vector(Class::*)> pair;
//メンバ変数へのポインタを使って纏めて処理する
const pair arrPair[] =
{
pair("m_tokens_l", &Class::m_tokens_l),
pair("m_tokens_m", &Class::m_tokens_m),
pair("m_tokens_r", &Class::m_tokens_r)
};
for(int i = 0; i < ArrayCount(arrPair); ++i)
{
const string_vector& r = (this->*arrPair[i].second);
std::cout << "/*--------------------------*/" << std::endl;
std::cout << arrPair[i].first << std::endl;
for(std::size_t n = 0; n < r.size(); ++n)
std::cout << r[n] << std::endl;
std::cout << "/*--------------------------*/" << std::endl;
}
}
void dispatch(const std::string& sToken)
{
typedef std::pair<std::string, string_vector(Class::*)> pair;
//向きを比較する為にstringの先頭から2バイト分コピーする
const std::string sDelta(sToken.begin(), sToken.begin() + sizeof(wchar_t));
//メンバ変数へのポインタを使って纏めて処理する
const pair arrPair[] =
{
pair("左", &Class::m_tokens_l),
pair("中", &Class::m_tokens_m),
pair("右", &Class::m_tokens_r)
};
for(int i = 0; i < ArrayCount(arrPair); ++i)
{
if(arrPair[i].first != sDelta)
continue;
(this->*arrPair[i].second).push_back(sToken);
break;
}
}
private:
string_vector m_tokens;
string_vector m_tokens_l;
string_vector m_tokens_m;
string_vector m_tokens_r;
};
int main()
{
Class cls;
cls.print();
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
指定した文字を削除したい
-
#include "fstream.h"
-
C++での <iostream.h>と<iostre...
-
std::wstringのメモリリークに...
-
Cの関数からC++の関数(DLL)を...
-
構造体配列のvectorへの変換と...
-
VHDLのsignedとunsignedの違いは?
-
C++で、テキストファイルを一行...
-
メインプログラムに#include <a...
-
VxWorks 6.4ソケット接続につい...
-
getlineについて
-
string型のフォーマット書式指...
-
clock関数のコンパイルエラーで
-
#defineの使い方について
-
C言語 MACアドレス
-
C++のifstreamの使い方
-
構文エラーが出ているのですが...
-
振分の問題
-
ヘッダーファイルがインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
#define中の#のエスケープ
-
なぜ、C++の標準ヘッダをインク...
-
C++で、テキストファイルを一行...
-
C言語のエラーを修正したい
-
gccでコンパイル時のエラー
-
C言語のポインターで詰まっている
-
#include "fstream.h"
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報