[your code here]
H. S. Teoh
hsteoh at quickfur.ath.cx
Tue Apr 17 21:48:43 PDT 2012
On Wed, Apr 18, 2012 at 05:35:24AM +0200, jerro wrote:
[...]
> There is a bug in this code. If a line is longer then width but
> doesn't contain spaces, find will return an empty range and the
> length of line will not decrease on each while loop iteration. So
> there is an endless loop.
You're right, I forgot about that case. Here's the fixed code:
---------------------------------snip--------------------------------
// Wraps long lines in standard input.
// Demonstrates D's powerful array manipulation facility and generic
// algorithms.
import std.algorithm;
import std.array;
import std.range;
import std.stdio;
void main() {
int width = 80;
foreach (line; stdin.byLine()) {
while (line.length > width) {
// Find longest space-terminated prefix of line that
// fits in width, and wrap it there.
char[] fits = find(retro(line[0..width]), " ").source;
if (fits.length==0) fits = line[0 .. width];
writeln(fits);
line = line[fits.length .. $];
}
writeln(line);
}
}
---------------------------------snip--------------------------------
This code will forcefully truncate the line at width if no space is
found.
Thanks for finding the bug!
T
--
A mathematician is a device for turning coffee into theorems. -- P. Erdos
More information about the Digitalmars-d
mailing list