0

こんにちは、私は C/C++ である種のパーサーを作成しています。かなり単純です"(" and ")"。C/C++ を使用してタグから文字列を取得できるようにしたいだけです。ロジックは、最初のタグを見つけて、1 文字ごとに数値をインクリメントするようなものであることを知っています。それは、次のタグが見つかるまで見つかります。しかし、私は論理を吸うので、誰かが少なくとも私に役立つ機能を与えることができれば.

編集:C/C++文字列関数は似ていないので、C++だけで十分です。

4

1 に答える 1

0

C と C++ での文字列処理の違いがよくわからないようです。あなたの説明は、Cスタイルの方法でそれをやりたいことを暗示しているようです。

void GetTag(const char *str, char *buffer)
{
    buffer[0] = '\0';
    char *y = &buffer[0];

    const char *x = &str[0];
    bool copy = false;

    while (x != NULL)
    {
        if (*x == '(')
            copy = true;
        else if (*x == ')' && copy)
        {
            *y = '\0';
            break;
        }
        else if (copy)
        { 
            *y = *x;
            y++;
        }
        ++x;
    }
}

別の方法として、C++ の方法は std::string を使用することです。これは、ポインターをいじらないため安全であり、間違いなく読みやすく理解しやすいものです。

std::string GetTag(const std::string &str)
{
    std::string::size_type start = str.find('(');
    if (start != str.npos)
    {
        std::string::size_type end = str.find(')', start + 1);
        if (end != str.npos)
        {
            ++start;
            std::string::size_type count = end - start;
            return str.substr(start, count);
        }
    }
    return "";
}
于 2013-06-23T06:14:52.877 に答える