如何在不使用variable_name.at()的情况下引用字符串的最后一个字符?

时间:2013-09-18 09:34:54

标签: c++ string if-statement reference

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

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。因此,我需要一种新方法来引用给定字符串变量中的最后一个字符,该字符串变量仍然可以使用给定的代码行。谢谢你的帮助!

2 个答案:

答案 0 :(得分: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语句。

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

你也应该简化那个表达式,这太复杂了。