Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Tokenize C String Menggunakan strtok() Tanpa Ralat?

Bagaimana untuk Tokenize C String Menggunakan strtok() Tanpa Ralat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 13:03:02675semak imbas

How to Tokenize a C   String Using strtok() Without Errors?

Menoken Rentetan C dengan strtok()

Untuk menandakan rentetan menggunakan strtok() dengan std::string, seseorang mesti menukar ia menjadi rentetan gaya C (char). Walau bagaimanapun, menukar secara langsung std::string kepada const char menggunakan str.c_str() boleh membawa kepada ralat.

Penyelesaian 1: Menggunakan istringstream

Pendekatan alternatif ialah menggunakan istringstream untuk membaca daripada std::string. Berikut ialah contoh:

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

int main() {
    std::string myText("some-text-to-tokenize");
    std::istringstream iss(myText);
    std::string token;
    while (std::getline(iss, token, '-')) {
        std::cout << token << std::endl;
    }
    return 0;
}

Kaedah ini hanya melingkari aliran istring, memecahkan rentetan menjadi token berdasarkan pembatas yang dinyatakan dalam getline().

Penyelesaian 2: Menggunakan Boost Toolkit

Sebagai alternatif, seseorang boleh menggunakan kelas tokenizer kit alat Boost untuk lebih fleksibiliti dan kawalan ke atas parameter tokenisasi. Berikut ialah contoh menggunakan Boost:

#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>

int main() {
    std::string myText("some-text-to-tokenize");
    boost::tokenizer<> tokenizer(myText, "-");
    for (auto token : tokenizer) {
        std::cout << token << std::endl;
    }
    return 0;
}

Atas ialah kandungan terperinci Bagaimana untuk Tokenize C String Menggunakan strtok() Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn