Proposal of a general do-while loop
Roberto Mariottini
rmariottini at mail.com
Wed Jul 18 00:10:26 PDT 2007
Taro Kawagishi wrote:
> Hello all,
>
> every once in a while I feel uneasy when I find I can't fit my logic into a do-while or while loop in a concise way.
> Here is a C++ example:
>
> void
> find_string_occurrences(const string& text, const string& pattern) {
>
> // listing 1
> size_t pos = text.find(pattern, 0);
> while (pos != string::npos) {
> cout << "pattern found at " << pos << "\n";
> ++pos;
> pos = text.find(pattern, pos);
> }
>
> }
>
> The way the code is written might look redundant in calling find() twice, but I think it is reasonable because you can test the loop condition only after you run function find() but here you can't use a do-while loop which doesn't allow you to place other statements after the condition statement.
[...]
> I think a more natural way to express the logic is to write the code as in listing 4.
>
> // listing 4
> size_t pos = 0;
> do {
> pos = text.find(pattern, pos);
> } while (pos != string::npos) {
> cout << "pattern found at " << pos << "\n";
> ++pos;
> }
>
> The meaning of
>
> do {
> aa;
> } while (bb) {
> cc;
> }
>
> is
>
> while (true) {
> aa;
> if (not bb) {
> break;
> }
> cc;
> }
>
> and is a natural extension to both of
>
> do {
> aa;
> } while (bb);
>
> and
>
> while (bb) {
> cc;
> }
>
> The current while loop and do-while loop will be specialized forms of this general do-while loop.
I agree with you, and I see the need for such a construct.
But this was already discussed some year ago, and Walter didn't like the
idea.
Ciao
More information about the Digitalmars-d
mailing list