C++连接一个查询字符串的所有值成一个字符串

问题描述:

如果我给出一个指向字符数组,说C++连接一个查询字符串的所有值成一个字符串

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 

我怎么会去在这个查询字符串想起来的价值观,并把它为另一种字符数组或看起来像这样一个std字符串:

ABCDEFGHIJKL 

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

+0

这个问题看起来同构[分割使用的分隔符字符串(http://stackoverflow.com/q/909289/1170277)。 – mavam 2012-04-26 16:43:12

如果你不想或者不能使用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; 

字符串包含结果。

+0

非常简单...我想我喜欢这个最好的。 – varatis 2012-04-26 19:23:44

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

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;} 
} 

使用boost :: split()。看到这个答案对一个类似问题https://stackoverflow.com/a/236976/10468

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, "="); 
} 

好老串迭代:

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;