1. 程式人生 > >std::string::find() 和 std::string::npos

std::string::find() 和 std::string::npos

int idx = str.find("abc");
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::CStringAstd::string之間轉換的一些誤區

        對於剛做windows下VC的開發同學,型別轉換應該是一個令其很苦惱的問題。我剛寫工作的時候,也為這類問題不停的在網上搜索轉換方法。最近工作中遇到一個“神奇”的bug(一般“神奇”的問題往往是低階錯誤導致的),最後跟蹤發現還是型別轉換問題。(轉載請指明出處) 

dll中介面中使用std::stringstd::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.padLeftString.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(一)StringStringBuffer類

art com 依次 區別 del 索引 第一個字符 cde 基本 1.String類和StringBuffer類 在程序中經常會用到字符串,所謂的字符串就是指一連串的字符,它是由多個單個字符連接而成的。字符串中可以包含任意字符,這些字符必須包含在一對雙引號""之內,如"a

關於String StringBuffer StringBulider

int 次循環 system 系統 .html 線程安全 equal 代碼 build 關於String StringBuffer 和 StringBulider String是java中字符串中引用類型。 1.關於==和equals,String字符串的==通常用

StringStringBuffer類的區別

單個 出了 字符串連接 字符 折扣 可變 ren 時間 nop 首先,String和StringBuffer主要有2個區別: (1)String類對象為不可變對象,一旦你修改了String對象的值,隱性重新創建了一個新的對象,釋放原String對象,StringBuffe

java中String new直接賦值的區別

字符串相同 main 基礎 還需 賦值 請問 常量 int 表達 Java中String new和直接賦值的區別 對於字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的

淺談String,StringBufferStringBuilder的區別

操作 ringbuf builder 多個 比較 build 序列 不可變 存在 一、名詞解釋   String:字符串,並且是不可變對象;   StringBuffer和StringBuilder:字符串,並且是可變的字符序列。 二、速度比較   因為StringBuff