5

最初に文字列の配列を入力し、それを整数に変換してからベクトルにプッシュするプログラムを作成したいと思います。

コードは次のようになります。

string a;
vector<long long int> c;
cout << "Enter the message = ";
cin >> a;   
cout << endl;

cout << "Converted Message to integer = ";
for (i=0;i<a.size();i++) 
{
    x=(int)a.at(i);
    cout << x << " "; //convert every element string to integer
    c.push_back(x);
}

出力 :

Enter the message = haha
Converted Message to integer = 104 97 104 97

次に、それをファイルに書き込み、次のプログラムでそれを読み返し、文字列に変換し直します。私の質問は、それを行う方法ですか? ベクトル [104 97 104 97] を文字列 "haha" に変換します。

どんな助けにも本当に感謝しています。ありがとう。

4

5 に答える 5

6

[...] 私の質問は、それを行う方法ですか? ベクトル [104 97 104 97] を文字列 "haha" に変換します。

それはとても簡単です。std::vector要素をループし、オーバーロードを使用して、結果の文字列内std::string::operator+=の文字 (ASCII 値が に格納されている) を連結できます。std::vector

例えば

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

using namespace std;

int main()
{
  vector<int> v = {104, 97, 104, 97};
  string s;

  for (auto x : v)
  {
    s += static_cast<char>(x);
  }

  cout << s << endl;
}

コンソール出力:

C:\TEMP\CppTests>g++ test.cpp

C:\TEMP\CppTests>a.exe
haha

元のコードに関するちょっとしたメモ:

x=(int)a.at(i);

コード (つまり、上記のコード)では、古い C スタイルのキャストの代わりにC++ スタイルのキャストを使用したい場合があります。static_cast

さらに、ベクトルのサイズがわかっているため、有効なインデックスが から0までであることも知っておく必要があります。そのため、メソッドを使用する代わりに、(size-1)単純で高速で効率的なオーバーロードを使用しても問題ありません(インデックス境界チェックのオーバーヘッドがあります)。std::vector::operator[]std::vector::at()

したがって、コードを次のように変更します。

x = static_cast<int>( a[i] );
于 2013-08-07T10:00:39.040 に答える
5
 std::vector<int> data = {104, 97, 104, 97};
std::string actualword;
char ch;
for (int i = 0; i < data.size(); i++) {

    ch = data[i];

    actualword += ch;

}
于 2013-08-07T10:02:04.753 に答える
1

独自の関数オブジェクトまたはラムダ関数を使用して std::transform を使用して、逆キャスト、つまり (char)(int) を作成できます。

于 2013-08-07T09:52:49.137 に答える