这是用于学校
我正在使用与上一个项目相同的实现方式,在该项目中,我只是创建了一个终止变量,然后在读取该终止变量时退出了循环。但是,对于我编写的该程序,我的exit语句只是读入用户输入并继续该程序。我已经尝试了while循环和while循环。
这是我的程序
int main() {
std::string input;
std::string terminate = "end";
std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive
std::cout << "This program checks for a balanced expression" << std::endl << "Enter 'end' to end the program" << std::endl;
while(input != terminate){
std::cout << "Enter Expression: ";
std::cin >> input;
if(checkBalance(input))
std::cout << input << " " << "is balanced" << std::endl;
else
std::cout << input << " " << "is not balanced" << std::endl;
}
return 0;
}
答案 0 :(得分:1)
有两件事会中断代码的工作
std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive
首先是逻辑问题。您对预定义的字符串 terminate 执行操作,但不更改用户输入的字符串 input 。实际上,您可以替换
std::string terminate = "end";
std::transform(terminate.begin(), terminate.end(), terminate.begin(),::toupper); //Extra stuff makes it not case sensitive
一行
std::string terminate = "END";
接下来的事情是您在读取循环之前更改了行的大小写,因此它不能修改用户输入,它仅定义字符串的初始状态。 因此,需要修改字符串修改的位置和目标:
int main() {
std::string input;
// Replace two initial rows by one with the same result
std::string terminate = "END";
std::cout << "This program checks for a balanced expression" << std::endl << "Enter 'end' to end the program" << std::endl;
while(input != terminate){
std::cout << "Enter Expression: ";
std::cin >> input;
if(checkBalance(input))
std::cout << input << " " << "is balanced" << std::endl;
else
std::cout << input << " " << "is not balanced" << std::endl;
// Modify user input to upper case for possibility of successful check on next while loop
std::transform(input.begin(), input.end(), input.begin(),::toupper); //Extra stuff makes it not case sensitive
}
return 0;
}
我在 checkBalance(input)之后找到了 input 修改,因为我不确定它可以对 input 进行哪些修改。实际上, input 大小写转换的最逻辑位置是直接在读取字符串之后,即在
之后std::cin >> input;
还有一个便条。您的初始代码应退出以输入 END (即大写)。