簡體   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