4

文字配列から5文字をコピーしようとしていますstd::string

char name[] = "Sally Magee";
std::string first;
copy(name, name + 5, first.begin()); //from #include <algorithm>
std::cout << first.c_str();

ただし、文字列に加えて、不要な印刷できない文字が大量に含まれています。何か案は?ありがとう。

4

2 に答える 2

15

やるだけ

char name[] = "Sally Magee";
std::string first(name, name + 5);
std::cout << first << std::endl;

std::string コンストラクタリンクを参照してください

于 2013-07-01T03:54:55.390 に答える
1

アルゴリズムが行うことは、std::copyソース要素を次々にコピーし、各要素の後に宛先反復子を進めることです。

これは、

  • コピー先のコンテナーのサイズが、コピーするすべての要素に収まる大きさに設定されているか、
  • または、割り当てを行うたびに宛先コンテナーのサイズを増やすイテレーター型を使用します。

したがって、このstd::copyアルゴリズムを使用する場合、これを解決するには 2 つの方法があります。

  1. コピーを作成する前に文字列のサイズを変更します。

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    int main()
    {
      char source[] = "hello world";
    
      std::string dest;
      dest.resize(5);
      std::copy(source,source+5,begin(dest));
    
      std::cout << dest << std::endl;
    
      return 0;
    }
    
  2. 標準の反復子の代わりに後方挿入反復子を使用する:

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <iterator>
    
    int main()
    {
      char source[] = "hello world";
    
      std::string dest;
      std::copy(source,source+5,std::back_inserter(dest));
    
      std::cout << dest << std::endl;
    
      return 0;
    }
    

ただし、他の人が指摘したように、初期化時に最初の 5 文字を文字列にコピーするだけの場合は、適切なコンストラクターを使用することが明らかに最適なオプションです。

std::string dest(source,source+5);
于 2013-07-01T04:03:09.260 に答える