【问题标题】:While loop to for loop issueWhile循环到for循环问题
【发布时间】:2018-11-05 02:03:11
【问题描述】:

我知道这是一个简单的问题,但有人可以帮我弄清楚如何将此 while 循环转换为 for 循环。我一直在尝试转换它时遇到错误

static string CountLines(string s)
{
    long count = 0;
    int start = 0;

    while ((start = s.IndexOf('\n', start)) != -1)
    {
        count++;
        start++;
    }
    return count.ToString();

}

这是我尝试过的方式

for (int start = 0; start !=-1 ; start = s.IndexOf('\n', start)) {
   count++;
   start++;
}

【问题讨论】:

  • “不断出错” - 什么是错误?
  • 没有任何反应的错误
  • 您是否需要将其转换为for循环?
  • 是的,我愿意。我需要它
  • 您基本上是在计算给定字符串中某个字符的出现次数。即您的情况下的 \n 字符。您的选择是实现这一目标的众多方法之一。有替代方案,一些使用 LINQ,可以更清晰。见stackoverflow.com/questions/10391481/…

标签: c# for-loop while-loop


【解决方案1】:

for 循环具有以下结构:

for (<initialization>; <condition to keep running>; <iterative statements>)
    <loop body>

因此,第一步,您要将条件从 while 循环语句移动到 for 循环语句的中间部分。

for (something; (start = s.IndexOf('\n', start)) != -1; something;)

现在,我们可以在第一部分引入初始化(int start = 0),在最后部分引入迭代语句(start++):

for (int start = 0; (start = s.IndexOf('\n', start)) != -1; start++)
{
    count++;
}

你有它。

【讨论】:

  • 我认为转移到 for 的全部意义在于摆脱条件中的分配。
  • @clcto 你是怎么得出这个结论的?我没有看到 OP 在任何地方提到它。
  • 因为他把它移出了条件句,并且不这样做是一种常见的风格指南。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
相关资源
最近更新 更多