繁体   English   中英

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

[英]How do I reference the last character of a string without using variable_name.at()?

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

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

在访问其元素之前,应检查text是否为空,并使用std :: string :: rbeginstd :: string :: back(需要C ++ 11)来简化代码。

您这样称呼它:

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

为了提高代码的可读性,您可以在这种情况下引入局部变量,制作char的副本很便宜,并且可以大大缩短if语句。

似乎很简单,只需先检查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) != '='))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM