質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

3855閲覧

二次元配列のvector(struct)に一元の配列をpush_backしたい。

MrKametyou

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/04/25 09:24

編集2022/01/12 10:55

cinで行の値、括弧でくくられた3つの値をそれぞれ入力してもらいその値を構造化されたvectorにpush_backしたいのですが、どのようにすればよいのかわかりません。
最終的にこのような配列を得たいです。
vector<building> b = { {1,11,5}, {2,6,7}, {3,13,9}, {12,7,16}, {14,3,25}, {19,18,22}, {23,13,29}, {24,4,28} };


4
(5,3,4)
(3,8,2)
(4,6,7)
(9,10,4)

c++

1struct Buildings{ 2 int left; 3 int ht; 4 int right; 5}; 6int main(){ 7  int n; 8 cin >> n; 9 vector<Buildings> bu = {};//このvectorに配列をpush_backしたい。 10 int arr[1000][3]; 11 char str[256]; 12 for(int i = 0; i < n; i++){ 13 int index = 0; 14 cin.getline(str,256); 15 cout << str << "\n"; 16 int len = strlen(str); 17 char *p; 18 p = strtok(str, "(),"); 19 while(p){ 20 arr[i][index] = stoi(p);//数字だけを抽出しいったん配列に入れる。 21 index++; 22 p = strtok(NULL, "(),"); 23 } 24 bu.push_back(arr[i]);//エラー 25 } 26 return 0; 27}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

C++

1#include <iostream> 2#include <string> 3#include <vector> 4 5struct Buildings{ 6 int left; 7 int ht; 8 int right; 9}; 10 11std::ostream& operator<<(std::ostream& stream, const Buildings& b) { 12 return stream << '(' << b.left << ',' << b.ht << ',' << b.right << ')'; 13} 14 15Buildings make_Buildings(int l, int h, int r) { 16 Buildings result; 17 result.left = l; 18 result.ht = h; 19 result.right = r; 20 return result; 21} 22 23int main(){ 24 using namespace std; 25 vector<Buildings> bu; 26 27 int n; 28 cin >> n; 29 cin.ignore(); 30 31 for(int i = 0; i < n; i++) { 32 string str; 33 int ary[3]; 34 getline(cin, str); 35 string::size_type bpos = 0; 36 string::size_type epos = 0; 37 for ( int i = 0; i < 3; ++i ) { 38 bpos = str.find_first_not_of("(), ", epos); 39 epos = str.find_first_of("(), ",bpos); 40 ary[i] = stoi(str.substr(bpos, epos - bpos)); 41 } 42 bu.push_back(make_Buildings(ary[0],ary[1],ary[2])); 43 } 44 45 // かくにん 46 cout << bu.size() << " Buildings...\n"; 47 for ( const Buildings& b : bu ) { 48 cout << b << endl; 49 } 50 51} 52 53/* 実行結果 543 55(12,34,56) 56(78,91,23) 57(45,67,89) 583 Buildings... 59(12,34,56) 60(78,91,23) 61(45,67,89) 62*/

投稿2018/04/25 10:26

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

c++

1#include <iostream> 2#include <vector> 3#include <cstring> 4using namespace std; 5struct Buildings{ 6 int left; 7 int ht; 8 int right; 9 // コンストラクタ 10 Buildings(int d[3]) : 11 left{d[0]}, 12 ht{d[1]}, 13 right{d[2]} 14 { 15 } 16}; 17int main(){ 18 int n; 19 cin >> n; 20 vector<Buildings> bu = {};//このvectorに配列をpush_backしたい。 21 int arr[1000][3]; 22 char str[256]; 23 for(int i = 0; i < n; i++){ 24 int index = 0; 25 cin.getline(str,256); 26 cout << str << endl; 27 int len = strlen(str); 28 char *p; 29 p = strtok(str, "(),"); 30 while(p){ 31 arr[i][index] = stoi(p);//数字だけを抽出しいったん配列に入れる。 32 index++; 33 p = strtok(NULL, "(),"); 34 } 35 bu.emplace_back(arr[i]); 36 } 37 // とりあえず表示してみる 38 for(auto& b: bu){ 39 cout << "left:" << b.left << endl; 40 cout << "right:" << b.right << endl; 41 } 42 return 0; 43}

投稿2018/04/25 10:03

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問