[英]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 :: rbegin或std :: 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.