让我们开始,我完全没有使用C ++的经验,但我得到了这个项目来连接POS和verifone。我们没有标准的verifone SDK,而是自定义的。
首先,我需要准备数据发送到C ++,C ++会将其发送给Verifone。这是我陷入困境的地方,我有一个.txt文件,我可以用C ++阅读,但现在我需要拆分数据。
这是我目前的代码:
#include "stdafx.h"
#include <sstream>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
string file_get_contents(const char *filename)
{
ifstream in(filename);
if (in.fail())
{
cerr << "File not found: " << filename << endl;
return "";
}
std::stringstream buffer;
buffer << in.rdbuf();
in.close();
return buffer.str();
}
int main(int argc, char **argv)
{
vector<string> strings;
string contents = file_get_contents("C:/wamp/www/cmd/config.txt");
string s;
while (contents, s, '||') {
cout << s << endl;
strings.push_back(s);
}
cout << s; // ECHO CONTENTS
std::cin.ignore(); // pause
return 0;
}
使用此代码,我的控制台只保持空白,不显示任何数据。 我分裂的完整字符串是:
"notepad://amount=10320.53||session_id=7946548443287465/"
我想要的结果是获得一个使用&#34; amount&#34;的数组。和&#34; session_id&#34;作为键及其值作为值。
实现这一目标的最佳方式是什么?
我使用以下代码在我的控制台中实际显示正在运行的字符串:
int main(int argc, char **argv)
{
string contents = file_get_contents("config.txt");
cout << contents; // ECHO CONTENTS
std::cin.ignore(); // pause
return 0;
}
答案 0 :(得分:1)
这显示了如何使用正则表达式来提取所需的信息,有很多关于如何正确读取文件的在线资源,所以我把这部分留了出来。
#include <iostream>
#include <regex>
#include <unordered_map>
#include <string>
int main(int argc, char **argv)
{
std::regex pattern("amount=([[:digit:]\\.]*)\\|\\|session_id=([[:digit:]]*)");
std::smatch results;
std::unordered_map<std::string, std::string> data;
std::string contents = "notepad://amount=10320.53||session_id=7946548443287465/";
//string contents = file_get_contents("C:/wamp/www/cmd/file.txt");
if(std::regex_search(contents, results, pattern))
{
data["amount"] = results[1];
data["session_id"] = results[2];
}
std::cout << "Amount: " << data["amount"] << std::endl;
std::cout << "Seesion ID: " << data["session_id"] << std::endl;
return 0;
}