好的,所以我正在用C++编写一个家庭作业项目,并且遇到了一个问题,似乎无法找到解决方法。该函数应该在用户定义的分隔符处破坏输入字符串,并将子字符串存储在一个向量中以便稍后访问。我想我得到了基本的解析器,但它不想分割输入的最后部分。C++字符串解析器问题
int main() {
string input = "comma-delim-delim&delim-delim";
vector<string> result;
vector<char> delims;
delims.push_back('-');
delims.push_back('&');
int begin = 0;
for (int i = begin; i < input.length(); i++){
for(int j = 0; j < delims.size(); j++){
if(input.at(i) == delims.at(j)){
//Compares chars in delim vector to current char in string, and
//creates a substring from the beginning to the current position
//minus 1, to account for the current char being a delimiter.
string subString = input.substr(begin, (i - begin));
result.push_back(subString);
begin = i + 1;
}
上述代码适用于将输入代码分割到最后一个破折号。之后的任何事情,因为它不会运行到另一个分隔符,它不会保存为一个子字符串,并推入结果向量。所以,试图纠正这个问题,我总结了以下:
else if(input.at(i) == input.at(input.length())){
string subString = input.substr(begin, (input.length() - begin));
result.push_back(subString);
}
不过,我不断收到出界失误上述部分。它似乎有分裂的子字符串的边界问题,我不知道如何解决它。任何帮助?
我建议存储最后一次拆分出现的索引,并在循环结束时,如果该值不是字符串的结尾,则将最后一次拆分后的所有内容你的结果。你现在拥有的东西有点令人怀疑,因为它会考虑与最后匹配的字符相同的字符(除了出界问题外)。 –
你有没有试过增加一辆卡车?即为您的字符串附加一个分隔符。 –
所以你想要使用两个分隔符'-'和'&'? – Raindrop7