【问题标题】:Converting a do-while loop into a while loop将 do-while 循环转换为 while 循环
【发布时间】:2014-10-19 01:02:20
【问题描述】:

我的代码是这样的,我只想将我的 do-while 循环转换为 for 循环或 while 循环,我该怎么做。该程序的重​​点是反转输入的单词。就像如果你输入 abc 它会输出为 cba。

int main()
{

    while (i < --length - 1);
        cout << word << endl;
return 0;
}

【问题讨论】:

  • 但是有没有其他办法可以改变,只需要修改上面的程序吗?
  • 那么你需要解释具体的限制,因为有很多方法可以反转字符串,有些方法比其他方法更简单。最简单的当然就是使用反向功能。
  • 您的 do-while 循环是错误的,因为它会因空字符串而中断。应该是for (int i = 0; i &lt; length; i++)
  • 你为什么编辑你的问题没有意义?

标签: c++ loops for-loop while-loop do-while


【解决方案1】:

将 while 循环转换为 for 循环的传统方式采用以下形式:

// While loop
int i = 0;
while( i < n ) {
    // Amazing things happen here
    i++;
}

// Equivalent for loop
for( int i = 0; i < n; i++ ) {
    // Amazing things still happen here
}

因此,应用到您的代码中,它看起来像:

char ch = word[i];
word[i] = word[length - 1];
word[length - 1] = ch;

for( int i = 0, length = word.length(); i < --length - 1; i++ ) {
    char ch = word[i];
    word[i] = word[length - 1];
    word[length - 1] = ch;
}

请注意,由于 do-while 循环在测试之前执行循环体,因此我必须将循环体的一份副本放在前面。为避免必须更新两个不同的代码副本,您可能需要将循环体提取到一个函数中,然后在循环前面和循环体中调用该函数。

还有一个while循环版本:

int i = 0, length = word.length();

char ch = word[i];
word[i] = word[length - 1];
word[length - 1] = ch;

while( ++i < --length ) {
    char ch = word[i];
    word[i] = word[length - 1];
    word[length - 1] = ch;
}

【讨论】:

  • 我尝试运行你的代码,但它似乎没有工作。但你的意思是我在我的 do-while 循环体中的代码应该在 while 循环之前我要把它转换成一个while循环。
  • 是的。 while 循环和 do-while 循环的唯一区别是 do-while 循环在执行一次循环体后测试条件。
  • 请注意,i &lt; --length - 1i + 1 &lt; --length 相同(除非溢出,这对于中间相遇不是问题)。你也想增加,所以while (++i &lt; --length)
  • @BenVoigt 谢谢;固定。
  • @APerson:这不是一个错误,这只是一种更短的编写方式。但是现在你确实有一个错误,因为i 每次迭代都会增加两次。
【解决方案2】:

另一种选择是这样,它不会对大小为 0 或 1 的字符串做任何事情:

int length = word.length();
if (length > 1)
{
    int i = 0;
    char ch;
    while (i < length)
    {
        ch = word[i];
        word[i] = word[length - 1];
        word[length - 1] = ch;
        i++;
        length--;
    }
}

对于版本:

int length = word.length();
if (length > 1)
{
    char ch;
    for(int i = 0; i < length; i++, length--)
    {
        ch = word[i];
        word[i] = word[length - 1];
        word[length - 1] = ch;
    }
}

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2021-05-22
    • 1970-01-01
    • 2012-01-18
    • 2020-08-28
    相关资源
    最近更新 更多