我正在使用C ++进行客户端服务器编程。
我的客户端发送一个值为
的字符串string receiveClient = "auth#user:pass";
如何将receiveClient
变量拆分为'#'
和':'
作为分隔符?
我试过使用我在网上找到的这个功能
vector split (const string &s,char delim)
{
vector string elems;
return(s,delim,elems);
}
我在main()
:
vector x = split(&receiveClient,"#");
但它返回以下
server.cpp: In function ‘int main()’:
server.cpp:128:8: error: missing template arguments before ‘x’
server.cpp:128:8: error: expected ‘;’ before ‘x’
root@ubuntu:/home/baoky/csci222_assn2# g++ server server.cpp
server.cpp:47:1: error: invalid use of template-name ‘std::vector’ without an argument list
server.cpp: In function ‘int main()’:
server.cpp:128:8: error: missing template arguments before ‘x’
server.cpp:128:8: error: expected ‘;’ before ‘x’
感谢您的帮助。非常感谢
答案 0 :(得分:3)
这些任务通常使用C ++中的流来完成。这样的事情应该有效:
// Beware, brain-compiled code ahead!
#include <vector>
#include <string>
#include <sstream>
std::vector<string> splitClientAuth(const std::string& receiveClient)
{
// "auth#user:pass"
std::istringstream iss(receiveClient);
std::vector<std::string> strings;
strings.resize(3);
std::getline(iss, strings[0], '#');
std::getline(iss, strings[1], ':');
std::getline(iss, strings[2]); // default is '\n'
if( !iss && !iss.eof() )
throw "Dude, you badly need an error handling strategy!";
if( string[0].empty() || string[1].empty() || string[2].empty() )
throw "Watcha gonna do now?";
return strings;
}
还有一点需要注意:
那些真的是 纯文字密码 吗?
在std::vector<std::string>
中拥有这个似乎对我不确定。如果这是我的代码,我希望 一个数据结构来存储用户信息 ,并将我写的内容写入其中。
判断你完全没有理解你在问题中粘贴的代码(Martinho是对的,这太糟糕了,它是否仍然可以被认为是C ++),并且从你的评论中可以看出, 您似乎不太需要good C++ book 。
答案 1 :(得分:2)
您在网上找到的代码是垃圾。试试这个
#include <vector>
#include <string>
using namespace std;
vector<string> split(const string& s, char delim)
{
vector<string> elems(2);
string::size_type pos = s.find(delim);
elems[0] = s.substr(0, pos);
elems[1] = s.substr(pos + 1);
return elems;
}
这是未经测试的代码,并且它不会执行任何错误检查(例如,s
不包含delim
的情况)。我会告诉你的事情。
你可以像这样调用这个函数
vector<string> x = split(receiveClient, '#');