2010-11-12 23 views
5

Olası Çoğalt boşluk kullanarak C/C++ bir çizgi:
How do I tokenize a string in C++?Bölme ayırıcı olarak

yalancı kod:

Attributes[] = Split line(' ') 

nasıl?

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


    } 

ve yazılı olmayan, sıkışmış, çıkış dosyası aldıktan:

Bunu yapıyor. Bu yanlış bir şey mi? Mesele benim yalancı kod gereksinimini karşılayarak bile değil, ama ben 2 loş dizi yazmalısınız nasıl endeks belirteçleri (char dizileri gibi) benim dizisi, sanırım yaklaşık karıştı? senin ayırıcı olarak " " ile

+3

çözümü C veya C++ kullanıyor olmanıza bağlı olarak farklıdır. – dreamlax

+17

Nasıl aşağıdaki örneklerle bazıları hakkında: http://www.codeproject.com/KB/recipes/Tokenizer.aspx Onlar çok verimli ve biraz zariftir. String Toolkit Library, C++ basit ve kolay bir şekilde karmaşık dizgi işlemesi yapar. –

cevap

5

Bu oldukça dup değil - C görmek ve @Zunino tarafından kabul cevabı here upvote ++ için. bunun üzerine tıklamak zorunda olacak cevabın tam şanlı zarafeti görmek için ancak aşağıya

Temel kodu.

#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")); 
} 

Bu varsayılan olarak, istream_iterator davranır boşluk onun ayırıcı olarak gerçeğine dayanıyor. Elde edilen belirteçleri (ostream_iterator yapıcı aşırı belirtilen ayırıcı başına) ayrı satırlarda cout yazılır.

+0

Bunu kullandım, teşekkürler. – andandandand

8

kullanın strtok.

+0

C++ için bu harika, cevabı C++ ile ilgili soruya bakın. –

1

kolay yöntem boost::split geçerli:

std::vector<std::string> words; 
boost::split(words, your_string, boost::is_space());