保存计算器输入并在下一行复制它的问题
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 输入的数字不会超过容器而只是转到下一行? [复制]
简单输入输出交互。 用户输入两个数字,计算并输出两个数字之和:(尝试只用一行代码实现这个功能) 输入半径,计算圆的面积。简单输入输出交互。 用户输入两个数字,计算并输出两个数字之和:(尝试只用一行代码