【发布时间】:2012-08-12 07:59:15
【问题描述】:
我从我的问题中得到的一个答案中得到了这个向量函数
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 中存在多少 delimiter 来修改接受?
例如,如果我有这个:
user#password#name#fullname#telephone
有时大小可能会有所不同。
我怎样才能让这个函数不管有多少元素都可以灵活地工作,并且能够像上面的这个函数一样拆分?
只是为了进一步解释我的问题:
我想要实现的是使用这个向量函数进行分割的能力,它的分隔符与 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]
【问题讨论】:
-
不,这不是 that 问题的重复。毫无疑问,其他人也问过同样的问题。但在找到这样的问题之前,请不要以“我不明白这个问题”为由投票结束
-
@close-voters:有什么急事?做些积极的事吧!
-
不确定你想做什么。您是否想要一组允许的分隔符,以便将
user#password@name@fullname与分隔符集{#@}分开会产生 4 个元素?请澄清。 -
嗯,你想做'n'次,这意味着你写了一个循环。您想将项目添加到向量中,因为您使用 vector::push_back。您已经有了在字符串中查找字符并拆分字符串的方法。只需以正确的方式将它们组合在一起即可。这是正常的编程。自己尝试一下,如果您遇到困难,请发布您的尝试,有人会提供帮助。您将通过这种方式了解更多信息。