增量在此方案中如何工作 C++ [已关闭]

How does increment work in this scenario C++ [closed]

提问人:Zeptuz 提问时间:12/10/2022 最后编辑:Zeptuz 更新时间:12/10/2022 访问量:58

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

12个月前关闭。

我没有写这个代码。 我在 C++ 编码的第三天,我很难理解 Incremnent 的一般工作原理。

int main()
{
  int antal_ord {};
  double medellangd {};
  string kort_ord;
  string langt_ord;
  int min_length {100}; 
  int max_length {};
  string S;

 cout << "Mata in en text:\n" << endl;

  while (cin >> S)
    {
      if (S.length() > max_length)
    {
      max_length = S.length();
      langt_ord = S;
    }
      
      if (S.length() < min_length)
    {
      min_length = S.length();
      kort_ord = S;
    }
      

      medellangd+=S.length();
      antal_ord++;
      
    }
  

  if (antal_ord == 0)
    {
      cout << "Inga ord matades in." << endl;
    }
  else {
    medellangd = (medellangd / antal_ord);
    round(medellangd);
    
    cout << "Texten innehöll " << antal_ord << " ord." << endl;
    cout << "Det kortaste ordet var " << '"' << kort_ord << '"' << " med "
     << kort_ord.length() << " tecken." << endl;
    cout << "Det längsta ordet var " << '"' << langt_ord << '"' << " med "
     << langt_ord.length() << " tecken." << endl;
    cout << "Medelordlängden var "<< fixed << setprecision(1) << medellangd << " tecken.";
  }
  return 0; 
}

antal_ord 是在此方案中写入的字数的变量。 在上面写着“cout << ”Texten innehöll “<< antal_ord << ”ord.“ << endl”的那一行中,它怎么知道写了多少个字?只有在这一行之前使用这个变量的时候是当变量递增时,但这如何让变量知道总共写了多少个单词呢? 还有 .length 命令,它基本上只计算写的字母数量吗?

C++ 类型转换 增量 IOSTREAM

评论

0赞 463035818_is_not_an_ai 12/10/2022
这段代码是你写的吗?
0赞 Zeptuz 12/10/2022
不,我正在努力理解它
0赞 463035818_is_not_an_ai 12/10/2022
您应该在问题中提及这一点。
0赞 Zeptuz 12/10/2022
好吧,会的
3赞 user12002570 12/10/2022
@Zeptuz 什么是调试器,它如何帮助我诊断问题?

答:

0赞 MSalters 12/10/2022 #1

这里真的没有什么特别的事情发生。每读一个单词,你就会递增一个。由于您开始时写的单词为零,并且 ,在末尾将等于从 中读取的单词数。cin >> Santal_ordantal_ord==0antal_ordcin

同样,返回当前在 中的字母数。就您而言,这正是您阅读后没有机会阅读的字母数量。但如果你这样做了,那么当然会改变。S.length()ScinSS += " some extra lettersS.length()

评论

0赞 Zeptuz 12/10/2022
是的,我刚刚意识到antal_ord++;仍然在循环中,真正让我感到困惑的是,我以为它在循环之外。
0赞 TheNomad 12/10/2022 #2

当您了解大多数编程语言时,您将从基础知识开始:语法、数据类型、声明(var + funcs 以及其他可能的概念)、循环、调用、数学运算以及与每种编程语言相关的其他代码控制技术。

你会看到最多的(我将尝试从我开始的泛化“倒带”并回到 C/C++)是,当涉及到加法时,你有以下类型的数学运算变化(让我们关注这一点,因为它更符合问题)。

  1. 结果是一个单独的变量,在我们的例子 b 中:b = a + 1;
  2. 导致相同的变量:a += 1;
  3. 递增变量的值:a++;

扩展一下:

  1. 在第一种情况下,b 的值将被覆盖,并且依赖于不同的值(在本例中为 a 和 1 的值)。这里需要关注的是 a 没有改变。

  2. 在本例中,a 接收一个新值并按右侧值递增,在本例中为 1。通过添加一个(不递增)来更改 a

  3. 在我们的例子中,与 #2 类似,8a* 的值被更新,但递增是按 1 完成的。

除了句法糖或代码风格偏好之外,两者之间的区别还在于变量分配其值的方式(更正式地说,在汇编代码中的“下面”)。对于刚开始编程的人来说,这个话题要复杂得多,但专注于这个问题,答案很简单,++将值递增1。

另请注意,和 之间的某些编码流程存在差异。主要在循环中。因为该值是在执行代码之前设置的,使用代码中已经递增的值,而首先使用当前值,然后递增它。++aa++++aa++

试试这个:

int i = 0;
while (++i < 100)
{
     std::cout << i << std::endl;
}

...对。。。

int i = 0;
while (i++ < 100)
{
     std::cout << i << std::endl;
}

然后计算每个案例写了多少行。

您还应该注意一个小警告,它更高级一些,所以它对你来说只是一个小小的“仅供参考”。有两种C++技术,称为“函数重载”和“运算符(重新)定义”。让我们关注第二个。您可以构建自己的数据类型(例如结构或类)并实现自己的运算符,这些运算符执行的操作与算术对应项执行的操作不同。您将在迭代器定义中看到这一点。在这种情况下,不是“实际值增量”(所以它不是数学计算),而是切换到列表中的下一项。一旦你上了课,你就会遇到这种情况。++std::vector