我目前正在使用的代码如下所示:
if ((text.at(text.size() -1 ) != '!' ) && (text.at(text.size() -1 ) != '?') && (text.at(text.size() -1 ) != ':' ) && (text.at(text.size() -1 ) != ',' ) && (text.at(text.size() -1 ) != ';' ) && (text.at(text.size() -1 ) != '=' ) )
它的细节并不是非常重要,但我基本上试图制作一种只使用命令提示符的文字处理程序,每当用户在输入缓冲区中没有任何内容输入时,程序就会关闭,因为它是以“一种不寻常的方式”终止,我将这意味着这行代码试图引用字符串中不存在的位置,即-1。因此,我需要一种新方法来引用给定字符串变量中的最后一个字符,该字符串变量仍然可以使用给定的代码行。谢谢你的帮助!
答案 0 :(得分:2)
在访问其元素之前,您应该检查text
是否为空,并使用std::string::rbegin或std::string::back(needs C++11)来简化您的代码。
if (!text.empty())
{
char c = *text.rbegin();
if (c != '!' &&
c != '?' &&
c != ':' &&
c != ',' &&
c != ';' &&
c != '=' )
{
}
}
为了增强代码的可读性,你可以在这种情况下引入一个局部变量,制作一个char的副本很便宜你可以缩短你的if
语句。
答案 1 :(得分:2)
看起来很简单,只需先查看text.size() > 0
if (text.size() > 0 &&
text.at(text.size() - 1) != '!' &&
text.at(text.size() - 1) != '?' &&
text.at(text.size() - 1) != ':' &&
text.at(text.size() - 1) != ',' &&
text.at(text.size() - 1) != ';' &&
text.at(text.size() - 1) != '=')
或者你想要这个逻辑(你的问题并不是很清楚)
if (text.size() == 0 ||
(text.at(text.size() - 1) != '!' &&
text.at(text.size() - 1) != '?' &&
text.at(text.size() - 1) != ':' &&
text.at(text.size() - 1) != ',' &&
text.at(text.size() - 1) != ';' &&
text.at(text.size() - 1) != '='))
你也应该简化那个表达式,这太复杂了。