2011-04-12 9 views
0

긴 문자열을 받아 작은 문자열로 나누어 배열에 추가하여보다 멋진 단락으로 출력 할 수있는 기능이 있습니다. 마지막 행이 출력되지 않는 경우를 제외하고는 정상적으로 작동합니다. 어떻게 출력 할 수 있을까요?간단한 단어 줄 바꾸기 마지막 줄 문제

void WordWrap(string inputString, string formatedAr[], const int SIZE) 
{ 
    unsigned int length; 
    unsigned int index; 
    unsigned int word; 
    unsigned int max = 65; 
    string outWord; 
    string outLine; 

    length = inputString.length(); 
    outWord = ""; 
    outLine = ""; 
    word = 0; 

    for(int i = 0; i < SIZE; i++) 
    { 
     formatedAr[i] = ""; 
    } 

    for(index = 0; index < length; index++) 
    { 
     if(inputString[index] != ' ') 
     { 
      outWord += inputString[index]; 
     } 
     else 
     { 
      if(outLine.length() + outWord.length() > max) 
      { 
       formatedAr[word] = outLine; 
       word++; 
       outLine.clear(); 
      } 
      outLine += outWord + " "; 
      outWord.clear(); 
     } 
    } 
} 
+0

일부 샘플 입력이 있습니까? ideone.com에 테스트 케이스 보여주기 –

+0

'formatedAr []'에 삽입 할 때'SIZE'를 체크하지 않습니다. 어쩌면'vector'를 대신 사용할 수 있을까요? –

답변

2

현재 행이 너무 오래 만들 수있는 문자를 추가 할 때 당신은 formatedAr에 쓰기 : 여기에 코드입니다. 또한 입력 문자열의 구문 분석을 마쳤 으면 잔여 문자를 formatedAr에 써야합니다.

for 루프 완료 후 formatedAr[word] = outLine;을 넣어보십시오.

+0

이 방법이 효과적이지만, 마지막 시간을 제외하고 매번 필요한 'outWord.clear()'를하고 있기 때문에 마지막 단어를 얻지 못합니다. 어떤 아이디어라도 좋은 기회가 될 때마다 매번하지만 마지막으로는 분명합니다. 방법 고마워. – Michael

+0

@Michael :하지만 outWord.clear()를하기 전에'outLine + = outWord + ""'를해야합니다. 그래서 단어는 잃지 않습니다. 그것은'outLine'에 있어야합니다. 또 다른 작은 문제가 있습니다. 마지막 단어 다음에 불필요한 공백이 있지만 이는 다른 것입니다. –

+0

@Rafal : 그 말이 맞습니다. 왜 마지막 단어가 출력되지 않는지 아십니까? – Michael

0

제안 :

내가 제대로 이해한다면, 당신은 다른 단어로 문장을 분할 할, 그래서 대신이 일을 :

for(index = 0; index < length; index++) 
    { 
     if(inputString[index] != ' ') 
     { 
      outWord += inputString[index]; 
     } 

...

왜 안 할 스트림을 사용합니다 :

string s(inputString); 
istringstream iss(s); 
vector<string> words; 
copy (istream_iterator(iss),istream_iterator(),back_inserter(words)); 
+0

'istream_iterator'는 타입 인자를 필요로합니다. –