string的find()與npos

牛马chen發表於2024-09-23

在 C++ 中,std::string::find() 是一個用於在字串中查詢子字串或字元的成員函式。查詢成功時返回匹配的索引位置,查詢失敗時返回 std::string::npos,表示未找到。

std::string::find() 函式原型

std::size_t find(const std::string& str, std::size_t pos = 0) const noexcept;
std::size_t find(const char* s, std::size_t pos = 0) const;
std::size_t find(char c, std::size_t pos = 0) const noexcept;

引數說明

  1. str/s:要查詢的子字串或字元。
  2. pos(可選):從哪個位置開始查詢,預設為 0,即從字串的開始位置查詢。
  3. 返回值:查詢成功時返回第一個匹配字元的索引,查詢失敗時返回 std::string::npos

std::string::npos

std::string::npos 是一個常量,表示查詢操作失敗或子字串不存在時的返回值。具體定義為 std::string::npos = -1,它實際上是一個 std::size_t 型別的最大值。

示例

以下是一些簡單的示例,演示如何使用 std::string::find()std::string::npos

查詢子字串

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 查詢子字串 "World"
    std::size_t found = str.find("World");
    if (found != std::string::npos) {
        std::cout << "Found 'World' at index: " << found << std::endl; // 輸出: Found 'World' at index: 7
    } else {
        std::cout << "'World' not found." << std::endl;
    }

    // 查詢不存在的子字串 "Earth"
    found = str.find("Earth");
    if (found == std::string::npos) {
        std::cout << "'Earth' not found." << std::endl; // 輸出: 'Earth' not found.
    }

    return 0;
}

查詢字元

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 查詢字元 'o'
    std::size_t found = str.find('o');
    if (found != std::string::npos) {
        std::cout << "Found 'o' at index: " << found << std::endl; // 輸出: Found 'o' at index: 4
    }

    return 0;
}

從指定位置開始查詢

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 從索引 5 開始查詢字元 'o'
    std::size_t found = str.find('o', 5);
    if (found != std::string::npos) {
        std::cout << "Found 'o' at index: " << found << std::endl; // 輸出: Found 'o' at index: 8
    }

    return 0;
}

總結

  • std::string::find():用於查詢字串或字元。返回子字串第一次出現的索引,或者返回 std::string::npos 表示未找到。
  • std::string::npos:表示查詢操作失敗時的返回值(通常為最大值 -1 表示無效位置)。

相關文章