変数をあるだけ読み込む

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cr
記事: 93
登録日時: 8年前

変数をあるだけ読み込む

#1

投稿記事 by Cr » 6年前

コード:

v 1 2 3
v 5 6 7 8 9
f 10 11 12 13 14 15 16
f 17 18
といったように、アルファベット1文字の後に数字がいくつか並んだ配列データをアルファベット毎に場合分けして配列の配列に格納したいです。

コード:

vector <vector<int> > v_list;
vector <vector<int> > f_list;
bool Road()
{
	ifstream ifs("data.txt");
	string str;

	if(ifs.fail()) 
		false;

	while(getline(ifs, str)) {
		//ここをどうすればいいのでしょう?
	}
	return true;
}

いくつあるか分からない変数をどのようにして読みとれば全部読みとる事が出来るのでしょうか?

アバター
みけCAT
記事: 6216
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 変数をあるだけ読み込む

#2

投稿記事 by みけCAT » 6年前

すぐ思いつく方法としては、strの内容をchar型の配列(もちろん動的確保でもいい)にコピーしてからstrtokですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6216
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 変数をあるだけ読み込む

#3

投稿記事 by みけCAT » 6年前

もちろん、自分で文字列をパースしてもかまいません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
Cr
記事: 93
登録日時: 8年前

Re: 変数をあるだけ読み込む

#4

投稿記事 by Cr » 6年前

strtok調べてみます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 変数をあるだけ読み込む

#5

投稿記事 by softya(ソフト屋) » 6年前

こういう手もあります。
「boost::tokenizerの使い方」
http://homepage2.nifty.com/c-labo/boost_tokenizer.html

【追記】
空白で区切ってあるだけなら、こういう手も使えますね。
「std::string Tips « Stop Making Sense」
http://99blues.dyndns.org/blog/2010/11/ ... ips/#tips6
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

かずま

Re: 変数をあるだけ読み込む

#6

投稿記事 by かずま » 6年前

Cr さんが書きました:

コード:

	while(getline(ifs, str)) {
		//ここをどうすればいいのでしょう?
	}
いくつあるか分からない変数をどのようにして読みとれば全部読みとる事が出来るのでしょうか?

コード:

    while (getline(ifs, str)) {
        istringstream iss(str);
        char c = 0;
        iss >> c;
        vector<vector<int> > *m;
        if (c == 'v') m = &v_list;
        else if (c == 'f') m = &f_list;
        else continue;
        m->push_back(vector<int>());
        typedef istream_iterator<int> t;
        copy(t(iss), t(), back_inserter(m->end()[-1]));
    }
<algorithm> の copy() や <iterator> の back_inserter() を使わない方法もあります。
そちらのほうがよろしいでしょうか?

beatle
記事: 1280
登録日時: 7年前
住所: 埼玉
連絡を取る:

Re: 変数をあるだけ読み込む

#7

投稿記事 by beatle » 6年前

softyaさんのNo.5の「追記」で紹介された方法を応用するのが楽で分かりやすいと思います。

コード:

#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;

int main()
{
    map<char, vector<int>> data;

    ifstream ifs("data");
    string str;

    while (getline(ifs, str))
    {
        istringstream iss(str);
        char c;
        int x;

        iss >> c;
        auto& v = data[c];
        while (iss >> x)
        {
            v.push_back(x);
        }
    }

    for (auto elem : data)
    {
        cout << elem.first << " :";
        for (auto num : elem.second)
        {
            cout << ' ' << num;
        }
        cout << endl;
    }
}

閉鎖

“C言語何でも質問掲示板” へ戻る