-1

私はC++で通訳言語に取り組んでいます。現在、私はすでにjavascriptから解釈された言語のバージョンを作成しており、javascriptsDOMへのバインディングがいくつかあります。さて、c ++でシステムベースのバージョンを作りたかったのですが、始めたばかりで、javascriptをc++に書き直すのは思ったより難しいことだと気づきました。あなたが知っている、タイプ定義、比較など。

現在、私は「セクション」という単語を小さく、大きく、混合されたキャプションで認識するパーサーを設計しています。つまり、JavaScriptでは、「==」演算子を使用して、文字列値のインデックスを数値と比較できます。これは、左側に与えられた値を評価するだけでなく、あらゆるものを比較するためにも使用できます。さて、javascriptについて十分に話してください。問題は、私はC ++に少し慣れていないということですが、実際には、文字列を入力として受け取り、単語「セクション」(大文字と混合の両方)を検索し、それが表示されたときに何かを実行する関数を作成したかったのです。それ。とても簡単に聞こえますか?さて、これは私が実際にコンパイルに成功したコードですが、「セクション」という単語はまったく表示されません。

#include <iostream>
#include <string>

string scanForSections(string iText){
    for(int i=0;i<iText.size();i++){
        if((iText[i]=='s'||iText[i]=='S')&&
           (iText[i+1]=='e'||iText[i+1]=='E')&&
           (iText[i+2]=='c'||iText[i+2]=='C')&&
           (iText[i+3]=='t'||iText[i+3]=='T')&&
           (iText[i+4]=='i'||iText[i+4]=='I')&&
           (iText[i+5]=='n'||iText[i+5]=='N')&&
           (iText[i+6]==' ')){
            i+=7;
            cout<<"section found!\n";
        }
    }
    return "0";
}

int main()
{
    scanForSections("section SECTION SeCtIoN");
    return 0;
}

ここでどのように比較すればよいですか?.equals()?他の比較演算子?部分文字列?解決策はありますか?例?

4

2 に答える 2

2

関数は「セクション」ではなく「セクチン」を検索します。

余談ですが、利用可能な解析ライブラリではないにしても、少なくとも利用可能な文字列関数については、実際に調査を行う必要があります。

于 2013-02-03T19:02:19.987 に答える
1

私はこれを提案します:

  1. 文字列を大文字[または小文字]に変換します。
  2. std::string::find()探している文字列を見つけるために使用します。string::npos文字列が見つからなかった場合、関数は戻ります。

たくさんのif文を手作業でコーディングするのではなく、「探す単語」と「その単語をどうするか」のある種のテーブルを作成することもできます。

数十のキーワードがある場合、各文字を比較する方法を実行することは持続可能ではありません。ここに示すように、探していた作業で文字の1つを見逃しました。

于 2013-02-03T19:07:20.943 に答える