View mode: basic / threaded / horizontal-split · Log in · Help
April 18, 2012
[your code here]
// 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;
			writeln(fits);
			line = line[fits.length .. $];
		}
		writeln(line);
	}
}
April 18, 2012
Re: [your code here]
On Wednesday, 18 April 2012 at 01:59:19 UTC, H. S. Teoh wrote:
> // 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;
> 			writeln(fits);
> 			line = line[fits.length .. $];
> 		}
> 		writeln(line);
> 	}
> }

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.
Top | Discussion index | About this forum | D home