2013-08-07 2 views
4

먼저 문자열 배열을 입력 한 다음이를 정수로 변환하고 벡터로 푸시하는 프로그램을 만들고 싶습니다.벡터 <int>을 문자열로 변환

코드는 다음과 같다 :

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
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; 

} 
1

당신은 표준을 사용할 수 있습니다 :: 역 캐스팅을 자신의 함수 개체 또는 람다 기능, 즉 (문자) (int)를 사용하여 변환.

3
#include <algorithm> 
#include <iostream> 

int main() 
{ 
    std::vector<int> v = { 104, 97, 104, 97 }; 

    std::string res(v.size(), 0); 
    std::transform(v.begin(), v.end(), res.begin(), 
     [](int k) { return static_cast<char>(k); }); 

    std::cout << res << '\n'; 
    return 0; 
} 

두 노트 :

  1. std::vector<char>에 벡터를 변경 강하게 것이 바람직 할 것이다 -이 작업을 더 쉽게 할 수 있도록 것이라고하고, static_cast<char>(k) 잠재적으로 위험하다.
  2. 항상 C 스타일의 캐스트는 피하십시오. 정말로 필요하다면 reinterpret_cast을 사용하십시오. 그러나 귀하의 경우에는 static_cast이 트릭을 수행했을 것입니다. C 스타일의 캐스트는 암시 적으로 const 영혼을 캐스팅하거나 판매하는 등 많은 나쁜 일을합니다.
+1

암시 const를 주조 ** IS ** 당신의 영혼을 판매. – StoryTeller

+0

@StoryTeller 예, 당신 말이 맞을지 모르지만 모든 사람들이 그렇게 보는지 확신 할 수 없었습니다. 그들의 영혼을 도넛으로 팔았던 우리 중 한 명은 이미 const 캐스팅을 더 나쁘다고 생각할 수도 있습니다. – nijansen

3

사용 std::string의 반복자 생성자 :

std::vector<long long int> v{'h', 'a', 'h', 'a'}; //read from file 
std::string s{std::begin(v), std::end(v)}; 
std::cout << s; //or manipulate how you want 

그것은 단지 문자를 저장해야 할 때 벡터 long long int을 포함하는 이유하지만, 질문을 구걸한다. 문자열로 변환하려고 할 때 조심하십시오.

+0

오래 오래 사용할 수 있습니까? –

+0

@NeilKirk, 그들이 범위 내에있는 한 그들이 더 나을 것입니다. 문자의 벡터는 나에게 더 의미가 있습니다. – chris

6

[...] 내 질문에 어떻게 할 할 것인가? 벡터 [104 97 104 97]을 문자열 "haha"로 변환합니다. 아주 쉽게

. 당신은 std::vector 요소들을 루프를 할 수 있으며, 결과 문자열에 (누구의 ASCII 값들이 std::vector에 저장됩니다) 문자를 연결하는 std::string::operator+= 오버로드를 사용합니다.

예컨대

#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)가.(i)에서; 당신은 C++ 사용할 수 있습니다

- 스타일 대신 오래된 C 스타일의 코드에서 캐스트 (위의 코드에서 즉 static_cast) 캐스트. 당신이 벡터의 크기를 알고 있기 때문에

또한, 당신은 또한 유효한 인덱스가 너무입니다 잘 간단 신속하고 효율적인 std::vector::operator[] 과부하를 사용하는 대신 인덱스와 함께합니다 (std::vector::at() 방법을 사용하여 0에서 (size-1)에 갈 것을 알아야한다 경계 검사 오버 헤드).

그래서, 나는 다음과 같은 코드를 변경 것 :

x = static_cast<int>(a[i]); 
관련 문제