2

如果我得到一个指向字符数组的指针,比如说

char *c = ....

和 c 指向一个字符数组,看起来像

0=A&1=B&2=C&3=D&4=E&5=F&6=G&7=H&8=I&9=J&10=K&11=L

我将如何只获取此查询字符串中的值,并将其转换为另一个 char 数组或 std 字符串,如下所示:

ABCDEFGHIJKL

编辑: 另外,我想您也可以先将 c 指向的 char 数组转换为字符串,我只是不确定如何解析字符串。
编辑 2: 另外,可能很方便知道的是该值只能是 1 个字符长(所以只有 1 个字母)。但是,名称(数字)可以是许多数字长......

4

5 回答 5

1

假设你有提升以下应该工作。

std::string str(c);
std::remove_if(str.begin(), str.end(), boost::is_any("123456789&="));

如果没有,我们可以自己制作。

struct is_any {
    std::string filter; 
    is_any(std::string filter) : filter(filter) {}
    bool operator()(char a){ return filter.find(a) != std::string::npos;}
}
于 2012-04-26T16:45:02.487 回答
0

使用 boost::split()。请参阅此类似问题的答案https://stackoverflow.com/a/236976/10468

于 2012-04-26T16:46:56.070 回答
0

如果你不想或不能使用 Boost,你也可以像这样提取值:

const char *query="0=A&1=B&2=C&3=D&4=E&5=F&6=G&7=H&8=I&9=J&10=K&11=L";
std::string values;
for (const char *p=query+1; *p; ++p) 
  if (p[-1]=='=')
    values += *p;

字符串包含结果。

于 2012-04-26T16:54:00.230 回答
0
std::vector<char> results;
const char* str = "0=A&1=B&2=C&3=D&4=E&5=F&6=G&7=H&8=I&9=J&10=K&11=L";
const char* str_end = str + strlen(str);
const char* token = strstr(str, "=");
while(token && (token + 1 < str_end))
{
   results.push_back(*(++token));
   first_token = strstr(token, "=");
}
于 2012-04-26T16:59:50.317 回答
0

好的旧字符串迭代:

char* str = "0=A&1=B&2=C&3=D&4=E&5=F&6=G&7=H&8=I&9=J&10=K&11=L";
int str_sz = strlen(str);

char dst[str_sz+1];
memset(dst, 0, str_sz+1);
int idx = 0;

for (int i = 0; i < str_sz; i++)
{   
    if (str[i] == '=')
    {   
        dst[idx] = str[i+1];
        idx++;
    }   
}   

std::cout << dst << std::endl;
于 2012-04-26T17:06:12.773 回答