0

トークナイザー関数を作成しようとしていますが、迷惑なエラーが発生します。私はC++を初めて使用し、構文に匹敵するほどではありません。あなたが私に与えることができるどんな助けにも感謝します。

using namespace std;

string[] tokenizer(const string &str, const char &delim){
    string tokens[3];
    for(int i = 0; i < 3; i++) tokens[i] = "";
    int start = 0;
    int toks = 0;
    for(int i = 0; i < str.length(); i++){
        if (str[i] == delim){
            for(int j = start; j < i; j++)
                tokens[toks] += str[i];
        }
    }
    return tokens;
}

エラーは関数ヘッダーにあります。

expected unqualified-id before '[' token

不注意なエラーでごめんなさい。それらを修正しましたが、それでも同じエラーが発生します。

4

3 に答える 3

1

関数の署名

string[] tokenizer(const string &str, const char &delim)

有効なC++ではありません。これを行う一般的な方法は次のstd::vector<>とおりです。

std::vector<string> tokenizer(const string &str, const char &delim)

それで:

string tokens[3];

今これを忘れてください。どういう3意味ですか?インデックスをフェンスで囲んでみませんtokensか?そのようなコードは、CとC++に関するすべての悪と悪いことわざの根源です。使用std::vector

std::vector<string> tokens;

にアイテムを追加するには、またはのいずれかstd:vectorを使用します。push_back()emplace_back()

次に、C ++で項目を反復処理する慣用的な方法は、次の場合に反復子または範囲ベースを使用することです。

for(auto it = str.begin(), end = str.end(); it!=end; ++it)

また ...

for(auto c : str)
于 2013-03-19T20:27:44.617 に答える
1

括弧はどこですか?

if str[i] == delim{if (str[i] == delim){

tokens[i] == ""tokens[i] = ""

return toks[];return toks;

于 2013-03-19T19:58:11.097 に答える
0

あなたの構文は奇妙で (Java または C# から来ていると思います)、多くのコンテキストが欠落していますが、あなたの目標は文字列を取得して「トークン化」することだと思います。これは、大まかにコードに基づいた実用的な実装です。決して最適ではありませんが、機能し、理解できるはずです。

#include <iostream>
#include <string>
#include <vector>

std::vector<std::string> tokenizer(const std::string &str,
                                   char delim = ' ',
                                   bool emptyok = false)
{
    std::vector<std::string> tokens;
    std::string t;

    for(int i = 0; i < str.length(); i++) 
    {       
        if (str[i] == delim) 
        {
            if(emptyok || (t.length() != 0)) 
                tokens.push_back(t);

            t.clear();      
            continue;
        }

        t.push_back(str[i]);
    }

    // And take care of anything that's left over...
    if(emptyok || (t.length() != 0)) 
        tokens.push_back(t);

    return tokens;
}

int main(int, char **)
{       
    std::string s = "This is a test of the emergency broadcast system yo!";

    std::vector<std::string> x = tokenizer(s, ' ');

    for(int i = 0; i != x.size(); i++)
        std::cout << "Token #" << i << ": \"" << x[i] << "\"" << std::endl;

    return 0;
}
于 2013-03-19T20:22:46.520 に答える