我想循环遍历一串字符,将每个字符取出,并且每个字符都必须是
const char*
类型,这样我就可以将其传递给函数。这是一个例子。
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);
// ...
}
您可以获取该元素的地址:
theval = &thestring[i];
string sym(1, thestring[i]);
theval = sym.c_str();
它为每个字符提供一个以 null 结尾的 const char*。
通常,
const char *
指向一个完整的以空结尾的字符串,而不是单个字符,所以我怀疑这是否真的是你想要做的。
如果这确实是您想要的,答案很简单:
theval = &thestring[i];
如果函数确实需要一个字符串,但您想向它传递一个单个字符的字符串,则需要稍微不同的方法:
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 );
}
这将产生一个小的 C 字符串(以空字符结尾的字符数组),每次迭代的长度为 1。
for
循环可以使用索引(如您编写的)或迭代器(如我编写的)来完成,并且它将具有相同的结果;我更喜欢迭代器,只是为了与 STL 的其余部分保持一致。
这里需要注意的另一个问题(尽管这些可能只是泛化代码的结果)是
result
将在每次迭代时被覆盖。
您可以保留该元素的地址:
theval = &thestring[i];