2012-01-19 10 views
1

私はこの機能を使用しましたが、間違っています。substrを使ってC++でユーザ定義の文を単語に分割する方法はありますか?

for (int i=0; i<sen.length(); i++) { 
    if (sen.find (' ') != string::npos) { 
     string new = sen.substr(0,i); 
    } 
cout << "Substrings:" << new << endl; 
} 

ありがとうございます!どんな種類の助けもありがとう!

+3

として、変数名として 'new'を使用しないでください。既に他の言語のために使用されています。 – Asaf

+0

ああ、予約語です。そうですか。ありがとうございました! –

+0

@CandaceParker:あなたの機能に間違いがないか教えてください。それはコンパイルされませんか?それはクラッシュしますか?悪い結果をもたらしますか? –

答えて

1

newはC++のキーワードなので、最初に変数名として使用しないでください。

その後、出力文を "if"ブロックに入れて、実際に部分文字列にアクセスできるようにする必要があります。スコープはC++では非常に重要です。

+0

ありがとう、サー・ジョン! これは私の完全なコードです –

0

最初:newは言語キーワードであるため、これはコンパイルできません。

次に、文字列内のすべての文字をループしているので、std::string::findを使用する必要はありません。 std::string::findを使用しますが、ループ条件が異なるはずです。

0

文字列を反復処理する必要はありません。これはすでにfindです。これは、デフォルトでは最初から検索を開始しますので、我々はスペースを見つけたら、私たちはこの発見スペースから次の検索を開始する必要があります。これは、スペースを開始するか、末尾の重複のスペースを、処理しないもちろん

std::vector<std::string> words; 

//find first space 
size_t start = 0, end = sen.find(' '); 

//as long as there are spaces 
while(end != std::string::npos) 
{ 
    //get word 
    words.push_back(sen.substr(start, end-start)); 

    //search next space (of course only after already found space) 
    start = end + 1; 
    end = sen.find(' ', start); 
} 

//last word 
words.push_back(sen.substr(start)); 

その他の特別な場合。あなたが実際にstringstreamを使用したほうが良いでしょう:

for(std::vector<std::string>::const_iterator iter= 
    words.begin(); iter!=words.end(); ++iter) 
    std::cout << "found word: " << *iter << '\n'; 
0

これは」doesnの:

#include <sstream> 
#include <algorithm> 
#include <iterator> 

std::istringstream stream(sen); 
std::vector<std::string> words(std::istream_iterator<std::string>(stream), 
           std::istream_iterator<std::string>()); 

それからちょうどあなたが好きか、単にベクトルを使用せずにループで直接それを行うしかし、これらを消すことができますsubstrとfindを使用するので、これは宿題であり、それを使用しなければならない場合、これは良い答えではありません...しかし、私はあなたがC++で求めていることをするより良い方法だと信じています。テストされていませんが、正常に動作するはずです。

//Create stringstream and insert your whole sentence into it. 
std::stringstream ss; 
ss << sen; 

//Read out words one by one into a string - stringstream will tokenize them 
//by the ASCII space character for you. 
std::string myWord; 
while (ss >> myWord) 
    std::cout << myWord << std::endl; //You can save it however you like here. 

それは宿題である場合は、人々が割り当てに固執するのでそのようにタグ付けする必要があり、彼らはそれを離れて与えることはありませんので、あなたを助け助け、および/またはしないようにどのくらい知っている:)

関連する問題