基本的に私は文字列をループしてそれぞれを引き出したいので、それぞれを型const char *にする必要があるので、関数に渡すことができます。例を示します。ご協力いただきありがとうございます。
string thestring = "abc123";
const char* theval;
string result;
for(i = 0; i < thestring.length(); i++){
theval = thestring[i]; //somehow convert this must be type const char*
result = func(theval);
}
string sym(1, thestring[i]);
theval = sym.c_str();
すべての文字に対してnullで終了するconst char *を提供します。
その要素のアドレスを取得できます。
theval = &thestring[i];
通常はconst char *
は、1文字ではなく、完全にnullで終了する文字列を指しているので、これが本当に実行したいことなのかどうかを質問します。
それが本当にあなたが望むものであれば、答えは簡単です:
theval = &thestring[i];
関数が実際に文字列を期待しているのに、1文字の文字列を渡したい場合は、少し異なるアプローチが求められます。
char theval[2] = {0};
theval[0] = thestring[i];
result = func(theval);
func
呼び出しは入力としてC文字列を期待していると思います。その場合、次のことができます。
string theString = "abc123";
char tempCString[2];
string result;
tempCString[1] = '\0';
for( string::iterator it = theString.begin();
it != theString.end(); ++it )
{
tempCString[0] = *it;
result = func( tempCString );
}
これにより、反復ごとに長さが1になる小さなC文字列(ヌルで終了する文字の配列)が生成されます。
for
ループは、インデックス(記述したとおり)またはイテレーター(記述したとおり)を使用して実行でき、同じ結果になります。残りのSTLとの一貫性を保つために、イテレータを使用することをお勧めします。
ここで注意すべきもう1つの問題(これらは単なるコードの一般化の結果である可能性があります)は、result
が各反復で上書きされることです。
その要素のアドレスを保持できます。
theval = &thestring[i];