保存计算器输入并在下一行复制它的问题

Posted

技术标签:

【中文标题】保存计算器输入并在下一行复制它的问题【英文标题】:Problems with Saving Calculator Input and Reproducing it on the Next Line 【发布时间】:2011-12-02 03:06:56 【问题描述】:

我有计算器代码,我需要根据字符串末尾出现的某个字符(例如“M”)保存给定的行(一次计算器一行)。此外,如果 'M' 在字符串中的任何位置,则添加最后保存的字符串来代替那个 'M'。

我认为这可以通过(伪代码)轻松完成,

foreach input element
  if input element == 'M' && is last element
    save = true
    erase M element

  if input element == 'M' && save != true
    insert saved string into input
    erase 'M' from input

  if save == true
    Set save string = input;

我尝试在下面的方法中执行此操作,但它不起作用。我不确定在哪里或如何保存字符串,以免它在每一行都被重置。当我尝试在输入末尾使用“M”时,我得到“字符串下标超出范围”(在另一个类中,但由于这种变化)。

const string operators = "*/+-";
const string memorize = "M";

list<string> lex(string input)

  list<string> tokens;
  bool save = true;
  string saveInfo = "2";
  string token;

  for (unsigned int i = 0; i < input.length(); i++)
  
    // Check if we need to save string element to memory
    if ((memorize.find(input[i]) != string::npos) && (i == input.length() - 1))
    
      save = true;
      // Remove 'M' from end of string
      input.erase(i);
    

    // Check if 'M' is element
    if (memorize.find(input[i]) != string::npos && !save)
    
      // Insert saved string
      input.insert(i, saveInfo);

      // Remove M from string
      input.erase(i);
    

    // Save input
    if (save)
    
      saveInfo = input;
    

    if (operators.find(input[i]) != string::npos)
    
      // Add any token we've created so far
      if (token.length())
      
        tokens.push_back(token);
        token.clear();
      

      // Add this operator as a separate token
      token.push_back(input[i]);
      tokens.push_back(token);
      token.clear();
    
    else
    
      // Grow the current token
      token.push_back(input[i]);
    
  

  // Any stragglers?
  if (token.length())
  
    tokens.push_back(token);
  

  // Clean 'em up
  for (list<string>::iterator i = tokens.begin(); i != tokens.end(); ++i)
  
    *i = clean(*i);
  

  return tokens;

saveInfo 目前每次都设置为“2”,直到我弄清楚我的字符串变量应该在哪里保存每次保存的字符串实例。

这是解决这个问题的正确方法吗?有没有更好的办法?你知道为什么这不起作用吗?

编辑:

示例输入:

INPUT: 2+1M
OUTPUT: 3  **2+1 is saved
INPUT: M+5  **2+1 is inserted into this input string at 'M'
OUTPUT: 8

我很久没有使用 C++ 了,感谢任何帮助!

【问题讨论】:

如果您提供示例输入和您期望的输出可能会有所帮助:-) @Philip 示例输入已添加:D 【参考方案1】:

首先想到的是:您正在迭代一个序列,同时通过添加和删除项目来修改它。这肯定会引起眼泪,因为您的索引在插入/删除后是错误的。

【讨论】:

好的,我将存储索引并循环插入和删除。

以上是关于保存计算器输入并在下一行复制它的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JS 输入的数字不会超过容器而只是转到下一行? [复制]

简单输入输出交互。 用户输入两个数字,计算并输出两个数字之和:(尝试只用一行代码实现这个功能) 输入半径,计算圆的面积。简单输入输出交互。 用户输入两个数字,计算并输出两个数字之和:(尝试只用一行代码

如何匹配特定字母并计算其频率? [复制]

C语言,输入一个整数,从高位开始逐位分割并输出它的各位数字

c语言如何计算n行字符串的长度?

计算不同行的总和并保存在单行 BigQuery 中