Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不使用变量_name.at()的情况下引用字符串的最后一个字符?_C++_String_If Statement_Reference - Fatal编程技术网

C++ 如何在不使用变量_name.at()的情况下引用字符串的最后一个字符?

C++ 如何在不使用变量_name.at()的情况下引用字符串的最后一个字符?,c++,string,if-statement,reference,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 ) != ';' ) && (te

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

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

在访问其元素并使用或简化代码之前,应检查
文本是否为非空

你这样称呼它:

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

为了增强代码的可读性,在这种情况下,可以引入局部变量,复制一个char很便宜,如果
语句过多,可以缩短

在访问其元素和使用或简化代码之前,应该检查
文本
是否为空

你这样称呼它:

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

为了增强代码的可读性,在这种情况下可以引入一个局部变量,复制一个char很便宜,如果
语句过多,可以缩短

似乎很容易,只需先检查
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) != '=')
或者也许你是有意这样做的(你的问题并不清楚)


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

似乎很简单,只需先检查
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) != '=')
或者也许你是有意这样做的(你的问题并不清楚)


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

检查
!text.empty()!text.empty()。在使用此函数之前,是否有一个库需要声明,而不是?您调用它:
*text.rbegin()!='!',对吗?我明白了,它不需要其他的libOhh。我是新来的,我试着写一些类似于
(text.at(rbegin())!='!')
。为帮助干杯@BenjaminLindley我遗漏了什么吗?之前,他在一个空字符串上使用
at
,并得到一个异常。您只是将其修改为取消对无效迭代器的引用,从而导致未定义的行为。他可能认为问题已经解决了,因为程序没有崩溃,因为他得到的不是异常,而是未定义的行为。非常感谢,但当我尝试编译此代码时,我得到错误“'rbegin'未在此范围内声明”。在使用此函数之前,是否有一个库需要声明,而不是?您调用它:
*text.rbegin()!='!',对吗?我明白了,它不需要其他的libOhh。我是新来的,我试着写一些类似于
(text.at(rbegin())!='!')
。为帮助干杯@BenjaminLindley我遗漏了什么吗?之前,他在一个空字符串上使用
at
,并得到一个异常。您只是将其修改为取消对无效迭代器的引用,从而导致未定义的行为。他可能认为问题已经解决了,因为程序没有崩溃,因为他得到的不是异常,而是未定义的行为。非常感谢,这也应该可以。我觉得这很粗糙,但我正在读一本关于如何编写代码的书,对他们给出的示例感到厌倦,所以我想尝试一些不同的东西。我相信它会随着时间的推移变得更好。感谢您的输入:)实际上,这对于翻译新段落来说真的很方便,所以您已经回答了一个我可能还没来得及回答的问题:谢谢,这也应该可以。我觉得这很粗糙,但我正在读一本关于如何编写代码的书,对他们给出的示例感到厌倦,所以我想尝试一些不同的东西。我相信它会随着时间的推移变得更好。感谢您的输入:)实际上,这对于翻译新段落来说真的很方便,所以您已经回答了一个我可能还没来得及回答的问题:D