2017-12-22 48 views
0
for (vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i) 
    { 
     int number = *i; 
     char* c; 
     itoa(number, c, 10); 
     result += c; 
    } 
    std::cout << result << std::endl; 

"vec"の各intをcharに変換して文字列に追加しようとしていますが、コンパイラエラーが発生します。私は何を間違えているのですか?各intをベクトルに追加する<int>を文字列に追加する

+0

コンパイラエラーが発生した場合は、どうしてあなたの質問にエラーが含まれないようにしたのですか?さらに、 'char * c; itoa(number、c、10); 'とにかく' c'が初期化されていないため、未定義の動作です。 –

+0

サンプルコードに変数の定義を含めてください。それはそれと関係があるかもしれない。 – Detonar

答えて

4

あなたはC++ 11で利用可能std::to_stringを使用することができます。

#include <iostream> 
#include <vector> 
#include <string> 

int main() 
{ 
    std::vector<int> vec; 
    for (int i = 0; i < 100; i++) 
    { 
     vec.push_back(i); 
    } 
    std::string result; 
    for (std::vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i) 
    { 
     result += std::to_string(*i); 
    } 
    std::cout << result << std::endl; 
} 
+0

あなたの 'for'ステートメントで' {} 'ブロックマーカーを入れてください(https://stackoverflow.com/posts/47941741/edit)。たとえそれが内部にある唯一の声明であっても。 – Ron

+0

私は通常それをしません。ここでの解釈を簡単にするためだけのものか、C++の一般的な優れた習慣のためのものですか? – apalomer

+1

C++の一般的な良い方法です。 – Ron

0

エラーがあなたのコードにあります:

あなたは未初期化のcharのポインタでitoa()を呼び出します。 itoa()には有効なバッファが必要なので、これは悪いことです!また、itoa()はC++標準の一部ではありません。

char*を残して、より現代的なC++機能、特にstd::stringstreamを置き換えてください。これは文字列ビルダーであり、変換には強力です(文字列+ =演算子よりも高速です)。 <<演算子(これは文字列リテラル、文字列、すべての種類の数字が可能)を使用して要素をプッシュして文字列を作成し、それ自身のデータ型の外部演算子を使って拡張することができます。また、 16進数など)を返し、メソッドstr()でその構築された文字列を返します。

#include <iostream> 
#include <vector> 
#include <string> 
#include <sstream> 

int main() 
{ 
    std::vector<int> vec; 
    for (int i = 0;i<100;i++) 
     vec.push_back(i); 
    std::stringstream ss; 
    for (auto& number : vec) 
     ss << number; 
    std::cout << ss.str() << std::endl; 
} 
1

std::accumulateのジョブのように聞こえます。

#include <iostream> 
#include <numeric> 
#include <string> 
#include <vector> 

auto main() -> int 
{ 
    const std::vector<int> vec{ 1, 2, 3 }; 
    const std::string result = std::accumulate(vec.begin(), vec.end(), std::string(), 
    [](const std::string& s, const int value) 
    { 
     return s + std::to_string(value); 
    }); 

    std::cout << result << std::endl; 
} 
+0

私は興味があります: 'auto main() - > int'と' int main() 'のメリットは何ですか? – user2328447

+0

恩恵はありません、私の部分だけのギミック –

関連する問題