高效遍歷:C++中分隔字串單詞的3種方法詳解與例項

架构师老卢發表於2024-05-03
高效遍歷:C++中分隔字串單詞的3種方法詳解與例項

概述:在C++中,遍歷由空格分隔的字串的單詞有多種方法,包括使用`std::istringstream`、手動遍歷字元和正規表示式。其中,`std::istringstream`是簡單高效的選擇,透過流提取單詞。手動遍歷字元較為繁瑣,正規表示式方法更靈活但可能有效能開銷。根據實際需求選擇方法,本文提供了清晰的例項原始碼。

在C++中,遍歷由空格分隔的單片語成的字串有多種方法,其中包括使用C++標準庫中的std::istringstream、手動遍歷字元的方法以及使用正規表示式等。下面將分別介紹這些方法,並提供詳細的例項原始碼。

方法一:使用std::istringstream

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string inputString = "Hello C++ World";
    std::istringstream iss(inputString);

    std::string word;
    while (iss >> word) {
        // 處理每個單詞,例如輸出
        std::cout << "Word: " << word << std::endl;
    }

    return 0;
}

這個方法使用了std::istringstream,它將輸入字串轉換成類似於輸入流的物件,然後透過>>運算子提取每個單詞。

方法二:手動遍歷字元

#include <iostream>
#include <string>

int main() {
    std::string inputString = "Hello C++ World";

    std::string word;
    for (char c : inputString) {
        if (c != ' ') {
            word += c;
        } else {
            // 處理每個單詞,例如輸出
            std::cout << "Word: " << word << std::endl;
            word.clear();
        }
    }

    // 處理最後一個單詞
    if (!word.empty()) {
        std::cout << "Word: " << word << std::endl;
    }

    return 0;
}

這個方法透過手動遍歷輸入字串中的字元,逐個構建單詞,遇到空格則處理當前單詞。

方法三:使用正規表示式

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::string inputString = "Hello C++ World";

    std::regex wordRegex("\\S+");  // 匹配非空白字元的正規表示式

    std::sregex_iterator it(inputString.begin(), inputString.end(), wordRegex);
    std::sregex_iterator end;

    while (it != end) {
        // 處理每個匹配到的單詞,例如輸出
        std::cout << "Word: " << it->str() << std::endl;
        ++it;
    }

    return 0;
}

這個方法使用了正規表示式來匹配非空白字元,從而提取每個單詞。

方法比較

這三種方法中,使用std::istringstream通常是最簡單和效率較高的方法,因為它充分利用了C++標準庫的功能。手動遍歷字元的方法相對繁瑣,而正規表示式方法可能會有一些效能開銷,但在某些情況下更靈活。

選擇方法應根據實際需求和效能要求來確定。如果只是簡單地分割空格分隔的單詞,std::istringstream是一個不錯的選擇。

相關文章