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

C++ C++;如何将其拆分为向量并使用它,c++,split,C++,Split,可能重复: 我用C++做客户端服务器编程。 我的客户机发送一个带值的字符串 string receiveClient = "auth#user:pass"; 如何将receiveClient变量拆分为“#”和”:“作为分隔符 我已经尝试使用我在网上找到的这个功能 vector split (const string &s,char delim) { vector string elems; return(s,delim,elems); } 我是在main()上这样做的:

可能重复:

我用C++做客户端服务器编程。 我的客户机发送一个带值的字符串

string receiveClient = "auth#user:pass";
如何将
receiveClient
变量拆分为
“#”
”:“
作为分隔符


我已经尝试使用我在网上找到的这个功能

vector split (const string &s,char delim)
{
  vector string elems;
  return(s,delim,elems);
}
我是在
main()
上这样做的:

但它给我的回报如下

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’

谢谢你的帮助。非常感谢

您在网上找到的代码是垃圾。试试这个

#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;
}

你在网上找到的代码是垃圾。试试这个

#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;
}

<>这些任务通常最容易使用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;
}
//当心,brain提前编译了代码!
#包括
#包括
#包括
std::vector splitClientAuth(const std::string和receiveClient)
{
//“验证#用户:通过”
std::istringstream iss(接收客户端);
std::向量字符串;
字符串。调整大小(3);
std::getline(iss,字符串[0],“#”);
std::getline(iss,strings[1],“:”);
std::getline(iss,strings[2]);//默认值为“\n”
如果(!iss&&!iss.eof())
抛出“老兄,你急需一个错误处理策略!”;
如果(字符串[0]。空()| |字符串[1]。空()| |字符串[2]。空()
抛出“Watcha现在该怎么办?”;
返回字符串;
}

还有几点值得注意:

  • 那些真的是纯文本密码吗

  • std::vector
    中使用这一点对我来说似乎是可疑的。如果这是我的代码,我希望一个数据结构来存储用户信息,并将发现的内容写入其中

  • 从你完全不理解你在问题中粘贴的代码(Martinho是对的,这太糟糕了,它是否仍然可以被认为是C++)以及从你的评论来看,你似乎非常需要一个


  • 这些任务通常最容易使用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;
    }
    
    //当心,brain提前编译了代码!
    #包括
    #包括
    #包括
    std::vector splitClientAuth(const std::string和receiveClient)
    {
    //“验证#用户:通过”
    std::istringstream iss(接收客户端);
    std::向量字符串;
    字符串。调整大小(3);
    std::getline(iss,字符串[0],“#”);
    std::getline(iss,strings[1],“:”);
    std::getline(iss,strings[2]);//默认值为“\n”
    如果(!iss&&!iss.eof())
    抛出“老兄,你急需一个错误处理策略!”;
    如果(字符串[0]。空()| |字符串[1]。空()| |字符串[2]。空()
    抛出“Watcha现在该怎么办?”;
    返回字符串;
    }
    

    还有几点值得注意:

    • 那些真的是纯文本密码吗

    • std::vector
      中使用这一点对我来说似乎是可疑的。如果这是我的代码,我希望一个数据结构来存储用户信息,并将发现的内容写入其中

    • 从你完全不理解你在问题中粘贴的代码(Martinho是对的,这太糟糕了,它是否仍然可以被认为是C++)以及从你的评论来看,你似乎非常需要一个



    这里的一些答案您可能会发现很有用:我不知道您是在哪里在线找到该函数的,但它完全没有用处,因为它无法编译,也没有意义。我建议您以后避免使用该源代码(可以告诉我们该源代码是什么,这样我们也可以避免它?@R.MartinhoFernandes,查看发布的代码,我认为etc.已被解释为某个HTML标记。@john,这一点都没有帮助。它使它编译和。。。胡说八道。@R.MartinhoFernandes可能是OP犯了这个错误。这里的一些答案你可能会发现很有用:我不知道你是在哪里在线找到这个函数的,但它完全没有用,因为它没有编译,也没有意义。我建议您以后避免使用该源代码(可以告诉我们该源代码是什么,这样我们也可以避免它?@R.MartinhoFernandes,查看发布的代码,我认为etc.已被解释为某个HTML标记。@john,这一点都没有帮助。它使它编译和。。。胡说八道。@R.MartinhoFernandes可能是OP犯了那个错误。。。。它可能需要一个
    #include
    #include
    和一个使用名称空间std的
    某个地方。我如何运行我尝试过的代码vector x=split(&receiveClient,“#”);EWW,
    使用名称空间std
    @john:。我写了数十万行代码,可能引入了数万个bug。但是我从来没有遇到过由
    使用名称空间std引起的bug。这不是问题。。。。它可能需要一个
    #include
    #include
    和一个使用名称空间std的
    某个地方。我如何运行我尝试过的代码vector x=split(&receiveClient,“#”);EWW,
    使用名称空间std
    @john:。我写了数十万行代码,可能引入了数万个bug。但是我从来没有遇到过由
    使用名称空间std引起的bug。这不是问题。