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

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

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

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

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

Q&A

解決済

2回答

3178閲覧

C++ stream の使い方

matu

総合スコア17

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

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

0グッド

0クリップ

投稿2015/03/02 17:01

C++ の初心者です。

string 型で
"str000",
"str001", ...
"str009"

というstringを作りたいのですが、どのようにしたらよいのでしょうか。
webの記事を参考に以下のようなプログラムを書いてみたのですが、出力が次のようにコンカチネートされてしまい困っています。

▪️プログラム
#include <string>
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <iomanip>

using namespace std;

int main(){

string my_string[10];
std::ostringstream sout;

for(int i=0; i<10; i++) {
sout << std::setfill('0') << std::setw(3) << i;
my_string[i]="str"+sout.str();
printf("[%d] string=%s\n", i, my_string[i].c_str());
}
}

▪️compile
compile:
g++ -std=c++0x -Wall -g
main.cc

▪️出力
[0] string=str000
[1] string=str000001
[2] string=str000001002
[3] string=str000001002003
[4] string=str000001002003004
[5] string=str000001002003004005
[6] string=str000001002003004005006
[7] string=str000001002003004005006007
[8] string=str000001002003004005006007008
[9] string=str000001002003004005006007008009

宜しくお願いします

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

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

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

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

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

guest

回答2

0

lang

1int main() { 2 3 const int SIZE = 10; 4 string my_string[SIZE]; 5 6 for(int i = 0; i < SIZE; i++) { 7 std::ostringstream sout; 8 sout << "str" << std::setfill('0') << std::setw(3) << i; 9 my_string[i] = sout.str(); 10 } 11 12 for(int i = 0; i < SIZE; i++) { 13 cout << "[" << i << "] string=" << my_string[i] << endl; 14 // printf("[%d] string=%s\n", i, my_string[i].c_str()); 15 } 16}

実行結果:

$ ./a.out [0] string=str000 [1] string=str001 [2] string=str002 [3] string=str003 [4] string=str004 [5] string=str005 [6] string=str006 [7] string=str007 [8] string=str008 [9] string=str009

投稿2015/03/02 21:58

katoy

総合スコア22324

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

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

matu

2015/03/06 15:42

ありがとうございました。 ループの中で std::ostringstream sout; を宣言することで初期化されることを理解しました。
katoy

2015/03/07 01:33

変数の スコープ について理解をしていただけたら、幸いです。
guest

0

ベストアンサー

sout.str("") で毎回、空文字列にするではだめですか?

for (int i = 0; i<10; i++) { sout.str(""); sout << std::setfill('0') << std::setw(3) << i; my_string[i] = "str" + sout.str(); printf("[%d] string=%s\n", i, my_string[i].c_str()); }

投稿2015/03/02 18:16

korokitkat

総合スコア24

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

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

matu

2015/03/06 15:42

ありがとうございます。 sout.str("");  で初期化すればよい、と理解しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問