这个问题的目标是从字符串中提取所有的元音、数字和符号,并将每个char/int放到它们各自的堆栈中(元音堆栈、数字堆栈和符号堆栈),在迭代字符串并提取所需内容之后,我必须根据字符串中最后一个符号的内容,对堆栈中的前两位数字(字符串中的后两位数字)进行算术运算。
约束之一是堆栈中不能有重复项;我处理这个约束的方法是,让一个向量包含已经使用过的元音、数字和符号,每次我通过检查字符串的当前字符是否是元音、数字或符号的逻辑时,我都会检查该字符是否已经“使用过”(aka present in the used vector)。然而,我刚刚被告知我们不允许在这个赋值语句中使用向量,所以我真的很困惑。我想创建一个'find'方法来搜索堆栈,但这需要弹出整个堆栈,我不认为这是一个选项,因为我必须显示和处理数字和符号堆栈中的项目。此外,在标题中指定我只能使用push(),pop(),isEmpty(),peek(),isFull()。
下面是负责检查和添加到堆栈的代码:
// traverse through the string
for (int i = 0; i < toParse.length(); i++)
{
// if the char is a vowel, add it to the vowel stack (if it's not already in the stack)
if(isVowel(toParse[i]) == true)
{
if(find(used.begin(), used.end(), tolower(toParse[i])) == used.end())
{
vowels.push(tolower(toParse[i]));
used.push_back(tolower(toParse[i]));
}
}
// if the char is a digit, add it to the digit stack (if it's not already there)
if(isdigit(toParse[i]))
{
if(find(used.begin(), used.end(), toParse[i]) == used.end() )
{
digits.push(atoi(&toParse[i]));
used.push_back(toParse[i]);
}
}
// if the char is a symbol, add it to the symbol stack regardless of whether it's already there or not
if(isSymbol(toParse[i]))
{
if(find(used.begin(), used.end(), toParse[i]) == used.end() )
{
symbols.push(toParse[i]);
used.push_back(toParse[i]);
}
}
}
谢谢你的阅读;我也不指望任何人做我的家庭作业,我只是想在正确的方向上得到一点指导!
编辑1:按照要求,以下是我的任务的确切文本:[1]:https://i.stack.imgur.com/crM1P.png
1条答案
按热度按时间vc6uscn91#
你可以把所有的元素从一个栈弹出到另一个栈中,然后检查每个值。这会颠倒栈的顺序,所以你需要在原来的栈中重复这个过程。这不是最优雅的解决方案,但可能会达到你的目的。
举例说明我的意思:
另一种方法是处理输入字符串并删除重复项,然后将其拆分并
push
到各自的堆栈中。这样你就不必检查堆栈中已经存在的内容,因为你已经删除了所有重复项并保证每个字符只显示一次。我不确定你的赋值语句有什么限制,但下面的链接可以让你开始使用这种方法:Remove duplicates in string algorithm