C ++如何将其拆分为向量并使用它

时间:2012-08-09 10:02:39

标签: c++ split

  

可能重复:
  Splitting a string in C++

我正在使用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’

感谢您的帮助。非常感谢

2 个答案:

答案 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, '#');