サンプルコード:C++でconst char **&のデータにアクセスするにはどうすればよいですか?
const char* list[] = {"Elem_E", "Elem_T", "Elem_R", "Turtle", "Rabbit"};
const char ** patterns=0;
.
.
.
bool sec_run = false;
patterns = list;
process_data(patterns, sec_run);
process_data機能:
process_data(const char **& pattern, bool sec_run){
.
.
some_variable=0;
for(int i; i < num_patterns;++i){
if(!sec_run){
some_variable = *pattern[i];
}
else{
if(/* list element contains "_" */)continue;
some_variable= /*letter after "_" */
}
if(some_variable == 'E') multiplier = 0;
else if(some_variable == 'T') multiplier = 1;
else if(some_variable == 'R') multiplier = 2;
}
}
だから私は何をしようとしているのベースがあります。私はprocess_dataの署名を変更することはできません。私がどのようにsome_variable = *pattern[i];
がE、T、またはRを返すかを知りません。リスト内の全要素に繰り返しアクセスする方法を理解できません。アンダースコアをチェックし、Eを解析するための "Elem_E"。
私はC++での背景がほとんどありませんが、Cを何度も使っています。私は困難な時間をchar ** &のビジュアル表現を見つけることができます。ここでは何が起きているのかを理解するのに役立ちます。
ご迷惑をおかけして申し訳ございません。
私はこれを行うには、おそらく以上の複雑な方法を探しているなどstrtokは、find_first_of、のようなものを検討して一日を過ごしました。私はこれが動作するかどうか確認する必要があります。関数のsec_runは2回呼び出され、最初に各要素の最初の文字に基づいて処理され、次に「_」の後ろに文字が1つあります。実際のコードはコンパイルされ、数百行になります。 – Tom
そして、私はstrtokが元のものを操作するのではなく、少なくとも私はそれがうまくいかないと思っていますが、strdupやstrcpをリスト内の個々の要素について理解することができませんでした。 – Tom
はい、 'strtok()'は入力文字列を変更して 'char *'入力を必要とするため、コンパイラは 'const char *'を 'char *'に渡していると不満を持ちます。あなたは入力のコピーを使用することができます。'char * itemDup = strdup(pattern [i]);'あなたが変更できるコピーを作成します。 'strdup'が割り当てたヒープメモリを解放するには、処理後に' free(itemDup); 'を呼び出さなければなりません。私は 'sec_run'について疑問を抱いていました。最初の文字のチェックを' '_ ''のチェックと同じループに追加することは可能かもしれません。 –