-3

chars 配列の単語をベクター文字列にコピーしたいのですが、次のコードを書いたところ、文字列、ベクター、単語がこのスコープで宣言されていないというエラーが表示され、ヘッダー ファイルで関数を宣言できますか?ヘルプ??

コードは次のとおりです。

vector<string> split(char sentence[])
{
    vector<string> ans(100);
    int count=0;
    for(unsigned int i=0;i<sentence.size();i++)
    {
    if(sentence[i]==' ')
        count=count+1;
    ans[count]=ans[count]+sentence[i];
    }
    return ans;
}
4

3 に答える 3

3

Achar[]はプリミティブ型であり、メンバ関数はありません。たとえば.size()...などはありません。

あなたは自分が何をしているのか知っていますか?これと、ヘッダーの欠落 (Luchian が既にコメントしている) は、実際にはそうではない印象を与えます...

于 2012-10-29T14:52:02.360 に答える
0

組み込みのライブラリか何かを使用して、文字列を正規表現で分割する必要があります。

a を使用する代わりに、 a をchar[]使用しstringます。それに変換するのは簡単char[]で、おそらく最初は文字列だったので、それを先に切り取った方がよいでしょう。

を形成するvector<string>には、次のことを行う必要があります。

#include <regex.h>
#include <string.h>
#include <vector.h>

using namespace std;

vector<string> split(string s){
    regex r ("\\w+"); //regex matches whole words, (greedy, so no fragment words)
    regex_iterator<string::iterator> rit ( s.begin(), s.end(), r );
    regex_iterator<string::iterator> rend; //iterators to iterate thru words
    vector<string> result<regex_iterator>(rit, rend);
    return result;  //iterates through the matches to fill the vector
}

それにはおそらく 1 つまたは 2 つのバグを解決する必要があり (私は少し錆びているだけです)、インライン ステートメントを使用して大幅に圧縮することもできます。

覚えておいてください: C++ の魔法は、反復子とインライン ステートメントの 2 つの形式で提供されます。

于 2012-10-29T15:51:52.503 に答える
0

ヘッダーを含めて、use with または use ディレクティブを修飾する必要<vector>があります<string>。フルネーム修飾を優先する必要があります。std::using

std::string
std::vector

編集:char*::sizeあなたが投稿したエラーメッセージ(「このスコープでは宣言されていませんでした」)に集中していたので、間違いに気づきませんでした。これは反対票に値すると考える人もいました...何でも。

于 2012-10-29T14:50:59.570 に答える