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

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

ただいまの
回答率

90.61%

  • C++

    3340questions

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

  • C++11

    108questions

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

  • String

    85questions

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

C++ stream の使い方

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,161

matu

score 8

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

宜しくお願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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/07 00:42

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

    キャンセル

0

int main() {

  const int SIZE = 10;
  string my_string[SIZE];

  for(int i = 0; i < SIZE; i++) {
    std::ostringstream sout;
    sout << "str" << std::setfill('0') << std::setw(3) << i;
    my_string[i] = sout.str();
  }

  for(int i = 0; i < SIZE; i++) {
    cout << "[" << i << "] string="  << my_string[i] << endl;
    // printf("[%d] string=%s\n", i, my_string[i].c_str());
  }
}
実行結果:
$ ./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/07 00:42

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

    キャンセル

  • 2015/03/07 10:33

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

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    c++でintをcharにキャストする方法

    c++でint型の数値をchar型にキャストするにはどうすればいいでしょうか? phpとかだとこんな感じだと思うのですが。 $suuti=(int)3.4990000; echo 

  • 受付中

    C++ variadic template template argument that match...

    I was wondering if it's possible to write a template function that can take any other arbi

  • 解決済

    2重ループのプログラム

    現在forの2重ループで下のような図形ができるように下のプログラムを書いたのですが、うまくいきません。なぜ下のプログラムではいけないのかは大体わかるのですが、どのように直せばうまく

  • 受付中

    C++ エラーがたくさんでて困っています。。デバッグを助けてください。。

    以下のコードを書いたのですが思い通りに動きません。。 デバッグを教えてほしいです。。 #include <iostream> #include <string.h> usin

  • 解決済

    C言語 式の構文エラー 内容について

    複数の単語からなる文を入力し,各単語の先頭文字を大文字に変えて表示させる というプログラムを作っているのですが、コンパイル時に ------ Borland C++ 5.5.1 f

  • 解決済

    出入力c++

    入出力のコードを書いていたのですが、エラーがでてしまいます。 問題点を指摘してくださるとうれしいです。 コード /*  * stream.cpp  *  *  Created on

  • 解決済

    参照型?ポインタ?

    関数の引数が書きなのですが、 通常のポインタや参照型と何が違うのでしょうか? , char*& strResult,

  • 解決済

    vector参照方法

    大学の課題で、0~9のうちの1つを入力するとそのローマ字(0ならばzero)が表示され、またその逆も可能なプログラム(zeroならば0)をvectorを用いて作るようにと出たので、

同じタグがついた質問を見る

  • C++

    3340questions

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

  • C++11

    108questions

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

  • String

    85questions

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