获取子字符串

时间:2014-09-07 20:37:46

标签: c++ string substring

我编写了一个小型客户端 - 服务器接口,它使用简单的类似MySQL的文本字符串(加密)在客户端和服务器之间进行通信。 用于在以下位置对用户签名的文本字符串示例:

SIGNIN WHERE USER="test" AND PASSWORD="1234"

我希望获取USERPASSWORD值以通过本地MySQL数据库进行检查,但我自USER和{PASSWORD以来一直难以置信{1}}字段大多数都是不同的大小。

在Lua中,可以使用与此类似的东西来获取值:

local username, password = 'SIGNIN WHERE USER="%s" AND PASSWORD="%s"';

C ++中有类似的东西以类似的方式从字符串中获取子字符串吗?

2 个答案:

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

相关问题