Reputation: 635
I want to loop through a string of characters pull each one out and each one has to be of type const char*
so I can pass it to a function. Here's an example.
string thestring = "abc123";
for(int i = 0; i < thestring.length(); i++){
const char* theval = thestring[i]; // somehow convert this must be type const char*
string result = func(theval);
// ...
}
Upvotes: 17
Views: 102679
Reputation: 110
You can keep the address of that element:
theval = &thestring[i];
Upvotes: -1
Reputation: 3678
I'm guessing that the func
call is expecting a C-string as it's input. In which case you can do the following:
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 );
}
This will produce a small C-string (null terminated array of characters) which will be of length 1 for each iteration.
The for
loop can be done with an index (as you wrote it) or with the iterators (as I wrote it) and it will have the same result; I prefer the iterator just for consistency with the rest of the STL.
Another problem here to note (although these may just be a result of generalizing the code) is that the result
will be overwritten on each iteration.
Upvotes: 4
Reputation: 954
string sym(1, thestring[i]);
theval = sym.c_str();
It gives a null-terminated const char* for every character.
Upvotes: 20
Reputation: 308111
Usually a const char *
is pointing to a full null-terminated string, not a single character, so I question if this is really what you want to do.
If it's really what you want, the answer is easy:
theval = &thestring[i];
If the function is really expecting a string but you want to pass it a string of a single character, a slightly different approach is called for:
char theval[2] = {0};
theval[0] = thestring[i];
result = func(theval);
Upvotes: 7
Reputation: 258548
You can take the address of that element:
theval = &thestring[i];
Upvotes: 27