2010-11-12 22 views
5

thể trùng lặp:
How do I tokenize a string in C++?tách một dòng trong C/C++ sử dụng khoảng trắng như delimiter

giả:

Attributes[] = Split line(' ') 

như thế nào?

Tôi đã làm điều này:

char *pch; 
    pch = strtok(line," "); 
    while(pch!=NULL) 
    { 
     fputs (pch, stdout); 


    } 

và nhận được một tổ chức phi văn bản, khó khăn, tập tin thoát. Đó là một cái gì đó sai trái với điều này? Vâng, điều thậm chí không đáp ứng yêu cầu giả của tôi, nhưng tôi đang bối rối về cách chỉ mục thẻ (như mảng char) cho mảng của tôi, tôi đoán tôi nên viết một mảng 2-dim?

+3

Giải pháp là khác nhau tùy thuộc vào việc bạn đang sử dụng C hoặc C++. – dreamlax

+17

Làm thế nào về một số ví dụ từ những điều sau đây: http://www.codeproject.com/KB/recipes/Tokenizer.aspx Họ rất hiệu quả và phần nào thanh lịch. Thư viện String Toolkit làm cho việc xử lý chuỗi phức tạp trong C++ đơn giản và dễ dàng. –

Trả lời

5

Điều này không hoàn toàn là sự lừa đảo - cho C++ xem và upvote câu trả lời được chấp nhận here bởi @Zunino.

Mã cơ bản bên dưới nhưng để xem sự thanh lịch đầy đủ của câu trả lời bạn sẽ phải nhấp vào nó.

#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 

int main() { 
    using namespace std; 
    string sentence = "Something in the way she moves..."; 
    istringstream iss(sentence); 
    copy(istream_iterator<string>(iss), 
      istream_iterator<string>(), 
      ostream_iterator<string>(cout, "\n")); 
} 

Bản lề này theo mặc định, istream_iterator xử lý khoảng trắng làm dấu phân tách. Các mã thông báo kết quả được ghi đến cout trên các dòng riêng biệt (mỗi dấu phân cách được chỉ định trong quá tải hàm dựng cho ostream_iterator).

+0

Tôi đã sử dụng điều này, cảm ơn. – andandandand

8

Sử dụng strtok với " " làm dấu phân tách của bạn.

+0

Điều đó thật tuyệt vời cho C, vì C++ xem câu hỏi liên quan trong câu trả lời của tôi. –

1

Phương pháp đơn giản nhất là boost::split:

std::vector<std::string> words; 
boost::split(words, your_string, boost::is_space()); 
Các vấn đề liên quan