如何将单个字符转换为以 null 结尾的 const char*

问题描述 投票:0回答:5

我想循环遍历一串字符,将每个字符取出,并且每个字符都必须是

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);
    // ...
}
c++ string char constants
5个回答
27
投票

您可以获取该元素的地址:

theval = &thestring[i];

18
投票
string sym(1, thestring[i]);
theval = sym.c_str();

它为每个字符提供一个以 null 结尾的 const char*。


6
投票

通常,

const char *
指向一个完整的以空结尾的字符串,而不是单个字符,所以我怀疑这是否真的是你想要做的。

如果这确实是您想要的,答案很简单:

theval = &thestring[i];

如果函数确实需要一个字符串,但您想向它传递一个单个字符的字符串,则需要稍微不同的方法:

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

4
投票

我猜测

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
将在每次迭代时被覆盖。


0
投票

您可以保留该元素的地址:

theval = &thestring[i];

© www.soinside.com 2019 - 2024. All rights reserved.