[英]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.