我编写了一个小型客户端 - 服务器接口,它使用简单的类似MySQL的文本字符串(加密)在客户端和服务器之间进行通信。 用于在以下位置对用户签名的文本字符串示例:
SIGNIN WHERE USER="test" AND PASSWORD="1234"
我希望获取USER
和PASSWORD
值以通过本地MySQL数据库进行检查,但我自USER
和{PASSWORD
以来一直难以置信{1}}字段大多数都是不同的大小。
在Lua中,可以使用与此类似的东西来获取值:
local username, password = 'SIGNIN WHERE USER="%s" AND PASSWORD="%s"';
C ++中有类似的东西以类似的方式从字符串中获取子字符串吗?
答案 0 :(得分:4)
您要找的是sscanf
良好的文档和示例使用: http://en.cppreference.com/w/cpp/io/c/sscanf
您案件的基本实施:
std::string exampleInput { "SIGNIN WHERE USER=\"foo\" AND PASSWORD=\"bar\" " };
char username[64] {0};
char password[64] {0};
std::sscanf(exampleInput.c_str(), "SIGNIN WHERE USER=%63s AND PASSWORD=%63s",
username, password);
编辑:如下所述,为已解析的字符串长度添加了限制。
答案 1 :(得分:1)
这是一个选项,使用stringstream:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
string input = "SIGNIN WHERE USER=\"test\" AND PASSWORD=\"1234\"";
stringstream ss(input);
ss.ignore(numeric_limits<streamsize>::max(), '"');
stringbuf username;
ss.get(username, '"');
ss.ignore(1);
ss.ignore(numeric_limits<streamsize>::max(), '"');
stringbuf password;
ss.get(password, '"');
cout << "username: " << username.str() << endl
<< "password: " << password.str() << endl;
}
此处的工作代码:http://codepad.org/B64WNz4O