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

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

古き良き文字列の反復:

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 に答える