0

我目前正在使用的代码如下所示:

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 ) != '=' ) )

它的细节并不是非常重要,但我基本上是在尝试制作一种只使用命令提示符的文字处理器,每当用户在输入缓冲区中没有任何内容的情况下按下 enter 时,程序就会关闭,因为它正在被终止“一种不寻常的方式”,我认为这行代码试图引用字符串中不存在的位置,即-1。所以我需要一种新的方法来引用给定字符串变量中的最后一个字符,它仍然可以使用给定的代码行。谢谢你的帮助!

4

2 回答 2

2

你应该text在访问它的元素之前检查它不为空,并使用std::string::rbeginstd::string::back(needs C++11)来简化你的代码。

你这样称呼它:

if (!text.empty())
{
    char c = *text.rbegin();
    if (c != '!' && 
        c != '?' && 
        c != ':' && 
        c != ',' && 
        c != ';' && 
        c != '=' )
    {
    }
}

为了提高代码的可读性,你可以在这种情况下引入一个局部变量,复制一个 char 很便宜,你可以大大缩短你的if语句。

于 2013-09-18T09:37:08.550 回答
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) != '='))

您还应该简化该表达式,它太复杂了。

于 2013-09-18T09:41:20.487 回答