Я пытаюсь обернуть слова данной строки и отобразить ее в окне сообщения, используя SFML (<- это не имеет значения). </p>
Итак, я пытаюсь сделать этовставить новую строку перед словом, которое больше ширины окна сообщения.Вот код:
string& message::word_wrap( string& msg , int w, int pt_size )
{
int text_width = w;
vector< string > lines;
string temp ( msg );
temp += " ";
int n = 0, p = 0;
while ( n != -1 )
{
string substr;
n = temp.find( " ", p+1 );
if ( (n * pt_size) >= text_width )
{
substr = temp.substr( 0, p );
lines.push_back( substr );
if ( n != -1 )
temp = temp.substr( p+1, string::npos );
p = 0;
}
else p = n;
}
string rtn;
for ( int i = 0; i < lines.size(); i++ ) rtn += lines[i] + '\n';
return rtn;
}
Я использую его в своем классе следующим образом:
message::message( sf::RenderWindow& App, const string& msg, int w, int h ) : app(App)
{
/* irrelevant code */
string m = msg; // <--
m = this->word_wrap( m, w, text.GetSize() ); // <--
text.SetText(m);
}
Есть две проблемы.
- Алгоритм переносит словадо того, как они превысят ширину окна сообщения.
Последние несколько слов по какой-то причине пропускаются, когда я использую его следующим образом:
pro::message::display( App, "Hello World! Yada Yada Bla Bla Yda Yada Hehehe Hehe Hfmaf Heh last few words" );
Пропускает последнее слово, слова :