2012-11-01 3 views
0

각 노드가 정수인 rank을 알고있는 mpi 프로그램을 작성하려고합니다.outstream 파일 이름으로 정수를 사용 하시겠습니까?

나는 각 노드가 파일 이름으로 rank.txt 파일을 생성하기를 바랍니다. 즉, 프로그램이 rank.txt이라는 파일을 생성하기를 바랍니다. 여기서 rank는 정수입니다.

intstring으로 변환하는 방법을 알고 있지만 그 문자열을 .txt과 결합하여 파일 이름에 넣을 수있는 방법에 대해 혼란 스럽습니다. 가장 쉬운 방법은 무엇입니까?

미리 감사드립니다.

편집

나는 .txt와 숫자를 조합하여 문자열 filename에 넣어하지만 std::ofstream out_stream(filename)를 입력 할 때 컴파일러는 나에게 말한다 한 난에 문자열을 넣을 수있는 방법

no matching constructor for initialization `std::outstream` 

그 파일 이름?

+0

방금'filename.c_str()'호출이 누락 되었습니까? 코드를 공유했다면 도움이 될 것입니다! – Rook

+0

[여기] (http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream)를보십시오. 'filename.c_str()'또는 C++ 11이 필요합니다. – juanchopanza

답변

2

보고 가장하고 다음하지 않으면 단지

std::ofstream out_stream(std::to_string(i) + ".txt"); 

std::string을 사용하는 std::ofstream에 대한 생성자가 없습니다. 당신은 const char*를 전달해야합니다, 그래서 그냥 말 :

std::ofstream out_stream(filename.c_str()); 

것들하지만, 최신 표준 개정과 변경, 그래서 C++ 11을 사용하도록 설정하는 방법에 대한 컴파일러 설명서를 참조하십시오.

1

이미 intstd::string (예 : rank_s)으로 변환 한 경우 rank_s + ".txt"이면 충분합니다.

+0

고마워요 larsmans,하지만 당신은 내 새 편집 좀 봐 줄 수있는 방법을 내가 그 문자열을 outstream 파일 이름에 넣을 수 가르쳐? – Vokram

1

fstream을 사용하고 < < 연산자를 사용하십시오.

std::string filename = boost::lexical_cast<std::string>(rank) + ".txt"; 

그렇지 않은 경우 (예를 들어) : 당신이 부스트를 사용할 수있는 경우

std::stringstream vIndex; 
vIndex << i; 
std::string index = vIndex.str() + ".txt"; 
1

: 문자열 연결에 대한 는

std::ostringstream s; 
s << rank; 
std::string filename = s.str() + ".txt"; 
0
std::string filename = std::to_string(i) + ".txt"; 

는 C를 지원하는 최신 컴파일러를 필요 ++ 11 (

)

질문에 대답 편집 : - 당신이있는 경우

을 C++ (11) 당신은 문제가 있다는 것입니다 다른 답변

+0

"int를 문자열로 변환하는 방법을 알고 있지만 ..." – juanchopanza

+0

J99 감사합니다.하지만 새 편집을 볼 수 있습니까? 그 문자열을 어떻게 outstream 파일 이름에 넣을 수 있을지 모르겠습니다 ... – Vokram

관련 문제