web-dev-qa-db-ja.com

C ++はcharをconst charに変換します*

基本的に私は文字列をループしてそれぞれを引き出したいので、それぞれを型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);
    }
12
user1054513
string sym(1, thestring[i]);
theval = sym.c_str();

すべての文字に対してnullで終了するconst char *を提供します。

15
dimitri

その要素のアドレスを取得できます。

theval = &thestring[i];
19
Luchian Grigore

通常はconst char *は、1文字ではなく、完全にnullで終了する文字列を指しているので、これが本当に実行したいことなのかどうかを質問します。

それが本当にあなたが望むものであれば、答えは簡単です:

theval = &thestring[i];

関数が実際に文字列を期待しているのに、1文字の文字列を渡したい場合は、少し異なるアプローチが求められます。

char theval[2] = {0};
theval[0] = thestring[i];
result = func(theval);
5
Mark Ransom

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が各反復で上書きされることです。

4
Greyson

その要素のアドレスを保持できます。

theval = &thestring[i];

0
Piyush Kumar