std::string::find() 和 std::string::npos
if (idx == string::npos)
... 上述程式碼中,idx的型別被定義為int,這是錯誤的,即使定義為 unsigned int 也是錯的,它必須定義為 string::size_type。 npos 是這樣定義的:
static const size_type npos = -1; 因為 string::size_type (由字串配置器 allocator 定義) 描述的是 size,故需為無符號整數型別。因為預設配置器以型別 size_t 作為 size_type,於是 -1 被轉換為無符號整數型別,npos 也就成了該型別的最大無符號值。不過實際數值還是取決於型別 size_type 的實際定義。不幸的是這些最大值都不相同。事實上,(unsigned long)-1 和 (unsigned short)-1 不同(前提是兩者型別大小不同)。因此,比較式 idx == string::npos 中,如果 idx 的值為-1,由於 idx 和字串string::npos 型別不同,比較結果可能得到 false。 要想判斷 find() 的結果是否為npos,最好的辦法是直接比較:
if (str.find("abc") == string::npos) { ... }
相關推薦
std::string::find() 和 std::string::npos
int idx = str.find("abc"); if (idx == string::npos) ... 上述程式碼中,idx的型別被定義為int,這是錯誤的,即使定義為 unsigned int 也是錯的,它必須定義為 string::size_type。
實戰c++中的vector系列--對vector<自己定義類>使用std::find 和 std::find_if 算法
++ pac price key fadein 輸出 var getitem mod 之前博客講了一些關於std::find和std::find_ if的一些使用方法。可是沒有講述對於vector中存儲的是自己定義的類。那麽怎麽樣使用std::find和
string find()函式、string::npos的含義、erase()函式
string::npos引數 —— npos 是一個常數,用來表示不存在的位置 例如,有兩個字串a、b,判斷a字串是否包含b字串 //如果字串不存在包含關係,那麼返回值就一定是npos if(a.find(b)!=string::npos){ cout<<
C++中string.find()函式與string::npos求解刪除子串題目
7-2 刪除字串中的子串 (20 分) 輸入2個字串S1和S2,要求刪除字串S1中出現的所有子串S2,即結果字串中不能包含S2。 輸入格式: 輸入在2行中分別給出不超過80個字元長度的、以回車結束的2個非空字串,對應S1和S2。 輸出格式: 在一行中輸出刪除字
實戰c++中的vector系列--對vector使用std::find 和 std::find_if 演算法
之前部落格講了一些關於std::find和std::find_ if的一些用法,但是沒有講述對於vector中儲存的是自定義的類,那麼怎麼樣使用std::find和std::find_if進行查詢呢? 先定義一個類: class Item { private
shell中$後加引號有什麽用($"string"和$'string')
定制 stand posix clas hose hex 完全 decimal 系列文章 有些時候在某些服務管理腳本中看到$"$string",經過一些測試,發現引號外面的$有和沒有是一樣的。剛才翻了下man bash,找到了解釋。 (1).如果沒有特殊定制bash環境或
淺談String str = "" 和 new String()的區別
關於String類的知識經常出現在面試題中,在此先記錄自己的理解。 首先明白一個事,java存在一個常量池,可以用來儲存字串常量。 1 建立的字串變數在記憶體中的區別 兩者看似都是建立了一個字串物件,但在記憶體中確是各有各的想法。 String str1= “abc”
你想知道的 std::vector::push_back 和 std::vector::emplace_back
## 引言 C++ 11 後,標準庫容器 `std::vector` 包含了成員函式 `emplace` 和 `emplace_back`。`emplace` 在容器指定位置插入元素,`emplace_back` 在容器末尾新增元素。 `emplace` 和 `emplace_back` 原理類似,本文僅
std::string::find 參考
http://www.cplusplus.com/reference/string/string/find/ std::string::find C++98 C++11 string (1) size_t find
ATL::CStringA和std::string之間轉換的一些誤區
對於剛做windows下VC的開發同學,型別轉換應該是一個令其很苦惱的問題。我剛寫工作的時候,也為這類問題不停的在網上搜索轉換方法。最近工作中遇到一個“神奇”的bug(一般“神奇”的問題往往是低階錯誤導致的),最後跟蹤發現還是型別轉換問題。(轉載請指明出處)
dll中介面中使用std::string和std::vector
最近在windows下封裝dll給客戶,介面引數型別都是std::string,直接在release模式下生成,客戶也沒什麼反饋。但是自己線下在debug模型下測試的時候引數始終傳遞不過去,除錯覺得記憶
std::string find 的返回值
std::string 的方法 find,返回值型別是std::string::size_type, 對應的是查詢物件在字串中的位置(從0開始), 如果未查詢到,該返回值是一個很大的資料(4294967295),判斷時與 std::string::npos 進行對
C++中string.find()函數與string::npos理解
mcs find tor mar tac auc bds rem weibo 墳fgAIY73怨SI攘狄http://shufang.docin.com/qrk5483 萄7NZA8y虜渦歡7http://huiyi.docin.com/sina_6264009306
Java中實現String.padLeft和String.padRight
toc 還要 color for 失去 1-1 arraycopy ace pre 因為習慣了C#中的padLeft和padRight,接觸Java後突然失去這兩個功能,覺得別扭,就試著實現了這兩個方法。 Java中String.format()中帶有字符串對齊功能如下
UVa 1596 Bug Hunt (string::find && map && 模擬)
mic 而後 賦值 技術分享 endif 所有 模塊 發現 left 題意:給出幾組由數組定義與賦值構成的編程語句, 有可能有兩種BUG, 第一種為數組下標越界, 第二種為使用尚未定義的數組元素, 叫你找出最早出現BUG的一行並輸出, 每組以‘ . ‘號分隔, 當有兩組輸入
JAVA API(一)String類和StringBuffer類
art com 依次 區別 del 索引 第一個字符 cde 基本 1.String類和StringBuffer類 在程序中經常會用到字符串,所謂的字符串就是指一連串的字符,它是由多個單個字符連接而成的。字符串中可以包含任意字符,這些字符必須包含在一對雙引號""之內,如"a
關於String StringBuffer 和 StringBulider
int 次循環 system 系統 .html 線程安全 equal 代碼 build 關於String StringBuffer 和 StringBulider String是java中字符串中引用類型。 1.關於==和equals,String字符串的==通常用
String類和StringBuffer類的區別
單個 出了 字符串連接 字符 折扣 可變 ren 時間 nop 首先,String和StringBuffer主要有2個區別: (1)String類對象為不可變對象,一旦你修改了String對象的值,隱性重新創建了一個新的對象,釋放原String對象,StringBuffe
java中String new和直接賦值的區別
字符串相同 main 基礎 還需 賦值 請問 常量 int 表達 Java中String new和直接賦值的區別 對於字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的
淺談String,StringBuffer和StringBuilder的區別
操作 ringbuf builder 多個 比較 build 序列 不可變 存在 一、名詞解釋 String:字符串,並且是不可變對象; StringBuffer和StringBuilder:字符串,並且是可變的字符序列。 二、速度比較 因為StringBuff