[perl] Сделать строку длиной N символов, добавив пробелы между словами

Elina74

Есть ли более-менее стандартная библиотека?
Есть строка - набор слов из букв. Слова разделены пробелами. Общая длина строки меньше N.
Нужно между отдельными словами вставить пробелы. Столько раз, чтобы общая длина стала равна N.
Причем так, чтобы места, куда ставить пробел, выбирались случайно. Иначе в тексте, состоящем из многих строк, появятся области с более разреженным текстом.

ppplva

в чем проблема-то ?
split по пробелу, и склеиваешь обратно

Anturag

#!/usr/bin/perl
$string = 'Hello, it\'s me';
$N = 20;
@words = split (/ /, $string);
$i = $#words;
for ($counter = 0; $counter < $N - length($string); $counter++) {
@spaces[rand($i)]++;
}
for ($counter = 0; $counter < $i ; $counter++ ) {
$newstring .= @words[$counter]." " x (@spaces[$counter] + 1);
}
$newstring .= @words[$i];
print $newstring."\n";

Можно написать и лучше наверняка, но пусть это профессионалы делают

ppplva

Тогда уже так:
#!/usr/bin/perl
$string = 'Hello, it\'s me';
$N = 20;
@words = split (/ /, $string);
$i = $#words;
for ($counter = 0; $counter < $N - length($string); $counter++) {
$words[rand($i)] .= ' ';
}
$newstring = join ' ', @words;
print $newstring.".\n";

Anturag

О, ништяк

Elina74

Спасибо обоим.
Не факт, что я бы додумался до конструкции.
$words[rand($i)] .= ' ';
То, что у меня крутилось в голове, было сложнее.

a10063

Причем так, чтобы места, куда ставить пробел, выбирались случайно. Иначе в тексте, состоящем из многих строк, появятся области с более разреженным текстом.
неверно
причем ни туда ни обратно...
нужно специально выбирать места

artimon

Будешь выбирать случайно, конда-нибудь получишь все пробелы после первого слова. Расставлять пробелы нужно равномерно.
Оставить комментарий
Имя или ник:
Комментарий: