c++ - 如何更改此 vector 函数以接受更多元素?

标签 c++ string vector split

<分区>

Possible Duplicate:
Splitting a string in C++

我从我的问题得到的答案之一得到了这个 vector 函数

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

但是,它只接受 2 个元素。如何根据字符串s中存在多少个分隔符修改为accept?

例如,如果我有这个:

user#password#name#fullname#telephone

有时大小可能会有所不同。

如何让这个函数无论有多少元素都能灵活工作,并且能够像上面这个函数一样拆分?

进一步解释我的问题:

我想要实现的是使用此 vector 函数进行拆分的能力,将相同的分隔符分隔为 N 大小,而不是固定为大小 2。

此函数最多只能拆分字符串中的 2 个元素,超过该值会导致 Segmentation core dump

像以前一样,我只需要使用

user:pass

现在我添加了更多属性,所以我需要能够拆分

user:pass:name:department

哪个x[2]和x[3]分别返回姓名和部门

他们都将使用相同的分隔符。

进一步更新:

我尝试使用下面答案之一提供的这个功能

vector<string> split(const string& s, char delim)
{
bool found;
vector<string> elems;
  while(1){
   string::size_type pos = s.find(delim);
   if (found==string::npos)break;
   elems.push_back(s.substr(0, pos));
   s=s.substr(pos + 1);
  }
  return elems;
}

我得到了一些错误

server.cpp: In function ‘std::vector<std::basic_string<char> > split(const string&, char)’:
server.cpp:57:22: error: passing ‘const string {aka const std::basic_string<char>}’ as ‘this’ argument of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’ discards qualifiers [-fpermissive]

最佳答案

像这样 %)

  vector<string> elems;
  while(1){
   string::size_type pos = s.find(delim);
   if (found==string::npos)break;
   elems.push_back(s.substr(0, pos));
   s=s.substr(pos + 1);
  }
  if(s.size())elems.push_back(s);
  return elems;

关于c++ - 如何更改此 vector 函数以接受更多元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920648/

相关文章:

c++ - 架构 arm64 的 undefined symbol : "cv::String::deallocate()"

c++ - 如何编译使用 PlaySound 函数的 C++ 控制台应用程序?

c++ - 链接 Paho MQTT CMake

Java 将扫描器输入与 ENUM 进行比较

javascript - 将图像对象作为函数和类参数传递

c++ - 使用巨大 vector 卡住 C++ 程序

java - Java Vector2d 类中的旋转

c# - 为什么其他语言没有类似 Java 垃圾收集器的自动垃圾收集?

c++ - 如何将 vector 传递给函数?

r - R中的加权数字总和