gpt4 book ai didi

C++ 字符串解析器问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:03 25 4
gpt4 key购买 nike

好吧,我正在用 C++ 做一个家庭作业项目,遇到了一个问题,而且似乎找不到解决方法。该函数应该在用户定义的定界符处断开输入字符串,并将子字符串存储在一个 vector 中,以便稍后访问。我想我弄清楚了基本的解析器,但它不想拆分输入的最后一部分。

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

上面的代码可以很好地将输入代码拆分到最后一个破折号。之后的任何内容,因为它没有遇到另一个定界符,所以它不会保存为子字符串并插入结果 vector 。因此,为了纠正这个问题,我整理了以下内容:

else if(input.at(i) == input.at(input.length())){
string subString = input.substr(begin, (input.length() - begin));
result.push_back(subString);
}

但是,我不断遇到上述部分的越界错误。拆分子字符串的边界似乎有问题,我不知道如何解决它。有帮助吗?

最佳答案

在您的代码中,您必须记住 .size() 将比您的最后一个索引多 1,因为它从 0 开始。因此大小为 1 的数组在 [0] 处建立索引。所以如果你这样做 input.at(input.length()) 总是会溢出 1 位。 input.at(input.length()-1) 是最后一个元素。这是一个对我有用的例子。在你的循环之后,只需捕获字符串的最后一段。

if(begin != input.length()){
string subString = input.substr(begin,(input.length()-begin));
result.push_back(subString);
}

关于C++ 字符串解析器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46574246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com