Простая функция переноса слов Проблема последней строки - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть функция, которая принимает длинную строку, разбивает ее на более мелкие строки и добавляет их в массив, чтобы их можно было выводить в более привлекательном абзаце.Он работает нормально, за исключением последней строки не выводится.Как бы я получить его на выходе?Вот код:

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();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Вы пишете только в formatedAr, когда добавление символа сделает текущую строку слишком длинной.Вам также нужно записать остаток в formatedAr, когда вы закончите анализ входной строки.

Попробуйте поместить formatedAr[word] = outLine; после завершения цикла for.

0 голосов
/ 12 апреля 2011

Предложение:

Если я правильно понимаю, вы хотите разбить предложение на разные слова, поэтому вместо этого:

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