在其他语言中最接近“拆分”的是什么?
他们为什么要改变它?当我尝试使用它时(没有特别的),它说它“不安全”。
感谢。
答案 0 :(得分:0)
_s(_secure)函数:
在20世纪90年代早期,缓冲区溢出存在很多问题。如果我没记错的话,其中一个原因就是增加一些尺寸/长度检查。
对于分裂,我相信你正在寻找能够返回某种数组的东西。如果是这种情况,我不相信你会发现它 以下是我解析应用程序路径的方法:
我这样定义:
template<typename TDataType>
std::vector<TDataType>
Tokenize(const TDataType &oSource, const TDataType &Delimiters)
{
std::vector<TDataType> OutputVector;
typename TDataType::size_type xPosLast = 0;
// auto xPosCurr = oSource.find_first_of(Delimiters, xPosLast);
typename TDataType::size_type xPosCurr = oSource.find_first_of(Delimiters, xPosLast);
while(xPosCurr != TDataType::npos)
{
if(xPosCurr != xPosLast) { // Ignore empty.
OutputVector.emplace_back(oSource, xPosLast, xPosCurr - xPosLast);
}
xPosLast = xPosCurr + 1;
xPosCurr = oSource.find_first_of(Delimiters, xPosLast);
}
if(xPosLast < oSource.length()) { // Ignore Last.
OutputVector.emplace_back(oSource, xPosLast, oSource.length() - xPosLast); // add what's left of the string
}
return OutputVector;
}
我这样用:
std::vector<std::string> PathVec = oAH.Tokenize<std::string>(sArgs, "/");
我这样检查:
for(std::vector<std::string>::iterator it = PathVec.begin(); it != PathVec.end(); ++it) {
std::cout << *it << ", ";
}
std::cout << std::endl << std::endl;
在OSX上,检查结果为:
Main()::Tokenize
Users, Thoth, Library, Developer, XCode, DerivedData, [AppNameAndID], Build, Products, Debug, [AppName].app, MacOS, [AppName]
经过一些关于分裂路径和标记化的研究后,我最终得到了上述内容。在定义Tokenize的标题的注释部分中,我有:
参考文献起作用:
- Evan Teran https://stackoverflow.com/users/13430
- 马吕斯https://stackoverflow.com/users/174650
- 亚历克·托马斯https://stackoverflow.com/users/7980
- Shadow2531 https://stackoverflow.com/users/1697
- Marco M. https://stackoverflow.com/users/140311
- Pixelchemist https://stackoverflow.com/users/951423/pixelchemist
- Alveko https://stackoverflow.com/users/565368/alveko