如果我有一个指向一组字符的指针,请说
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个字母)。但是,名称(数字)可以是多个数字......
答案 0 :(得分: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;}
}
答案 1 :(得分:0)
使用boost :: split()。请参阅此问题的答案https://stackoverflow.com/a/236976/10468
答案 2 :(得分: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;
字符串值包含结果。
答案 3 :(得分: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, "=");
}
答案 4 :(得分: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;