關於std string find 的返回值

2021-08-22 05:56:17 字數 1305 閱讀 8657

上次做日曆那個題(months and years 

( codeforces - 899b )

)的時候,看到了a.find(b) 的用法,就以為不存在就返回的是 -1,結果昨天td講課才知道那裡的 -1 並不是 「 -1 」。查了下資料,今天詳細介紹一下。。。。

std::string  的方法 find,返回值型別是std::string::size_type, 對應的是查詢物件在字串中的位置(從0開始),

如果未查找到,該返回值是乙個很大的資料(4294967295),判斷時與 std::string::npos 進行對比。

std::string str("abcdefg");

std::string::size_type pos = str.find("abc");

if (pos != std::string::npos)

std::string str("abcdefg");

if (str.find("abc") != std::string::npos)

很多同學由於經常使用 cstring 的緣故,喜歡這樣寫:

std::string str("abcdefg");

int pos = str.find("abc");

if (pos < 0)

這樣寫理論上也是可以的,因為 size_type 相當於 unsigned int型別,最大值4294967295強制轉換為int型,就是-1

但下面的寫法是錯誤的:

std::string str("abcdefg");

if (str.find("abc") < 0) //錯誤,應該寫成 != std::string::npos

最後,建議使用size_type,這樣可以適應不同的平台。因為int 型別的大小會根據不同平台而不同。

s.find(s2)        第一次出現的位置

s.rfind 最後一次出現的位置

s.find_first_of(s2) 任何乙個字元第一次出現的位置

s.find_last_of 任何乙個字元最後一次出現的位置

s.find_first_not_of(s2) 第乙個不在s2中的字元所在位置

s.find_last_not_of(s2) 最後乙個不在s2中的字元所在位置

參考:

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...