2016-06-06 5 views
0

나는 길이가 stringstream인데, 얼마나 많은 블록이 있는지를 블록으로 계산하고 있다고 생각한다. 블록 길이는 '\t' '\s' '\n'으로 나뉜다.stringstream의 길이를 계산하는 tellp()의 원리는 무엇입니까?

예 : stringstream = '23\t45\t5.677\t' 길이는 6이어야합니다. 구분 기호는 계산되어야합니다.

인수 유형이 모두 int 인 동안 나는 그저 내 아이디어를 확인할 수 있습니다. 여기 내 코드입니다.

s_double.tellp()는 10이 아닙니다.

#include<iostream> 
#include<sstream> 
#include<cstdlib> 

using namespace std; 
int main() 
{ 
    stringstream s_int; 
    stringstream s_double; 
    srand((unsinged)time(NULL)); 

    for(int index = 0;index<5;index++) 
    { 
     double random = rand()/(double) RAND_MAX * 5; 
     s_int<<index<<'\t'; 
     s_double<<random<<'\t'; 
    } 

    cout<<s_int.tellp()<<'\n'; 
    cout<<s_double.tellp()<<'\n'; 

    exit(0); 
} 

출력 :

10 
40 

I는 임의의은 s_double의 출력이 너무 변경된 범위를 변경 한 후.

double random = rand()/(double) RAND_MAX *9; 

출력 :

10 
42 
+0

귀하의 질문에 정확히 무엇이 있습니까? 한 곳에서'index'를 사용하고 다른 곳에서'random'을 사용하고 길이가 같을 것으로 예상하십니까? – Ajay

+1

''s_double'의 내용을 출력하려면'cout << s_double.str() << '\ n';'을 추가하십시오. – Galik

+0

@Ajay 5 개의 숫자와 하나의'int' 배열을 만들고 싶습니다. 하나의'double' 배열. 두 문자열의 길이는 동일합니다. 5.이 5 개의 int와 5 개의 double 번호를 문자열 스트림에 입력 한 후 ** 문자열 스트림에 대한 ** 길이가 변경되었습니다. ** 제외 된 사람의 길이는 모두 10 ** **이어야합니다. 왜냐하면 나는 단지 10 개의 문자열을'stringstream','int' /'double' 스트림 5 개, 5 '\ t'를 입력한다고 생각하기 때문입니다. –

답변

1

가장 쉬운하지만 빠른 방법은 다음과 같습니다

auto nLength = strm.str().length(); 

s_double 위치와 관련하여 -가되어 쉽게이 스트림의 콘텐츠를 검사하여 귀하의 질문에 대답하기 디버거를 사용하거나 인쇄하십시오. double은 0.554212545의 경우 "0.554213"이고 1의 경우 "1"이므로 문자열의 길이는 doubles과 다르다는 것을 알 수 있습니다.