【问题标题】:c++ assertion string iterator offset out of reangec++ 断言字符串迭代器偏移超出范围
【发布时间】:2021-01-07 00:10:28
【问题描述】:

我的断言失败。它在cin之后显示。我还检查了它显示路径的文件,但没有解决方案。 “字符串迭代器+偏移超出范围”是它显示的按摩。它发生在我在第 65 行使用“cin >> a”之后。有人可以帮助我吗?提前致谢。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

int gcd(int a, int b){
cout << "gcd" << endl;
if (b == 0) return a;
else return gcd(b, a % b);
}

int gcd_n(vector<int>nums){
int g;

size_t n = nums.size();
    
g = nums.at(0);
cout << "son" << endl;
for (int i = 1; i < n; i++){
        
    g = gcd(nums.at(i), g);
}
return g;
}

long long int multi_vect(vector<int> v){
long long int m = 1;

for (size_t i = 0; i < v.size(); i++)   
    m *= v.at(i);
return m;
}

int main() {
int a;
vector <vector<int>> all_vects;
cin >> a;
string input, sub;

getline(cin, input);
int n = input.find(' ');
vector<int> vect;
while(true){

    int num;
    sub = input.substr(0, n);
    istringstream(sub) >> num;
    vect.push_back(num);

    input = input.substr(n+1, input.back()+1);  
    n = input.find(' ');
    if (n == -1){
        istringstream(input) >> num;
        vect.push_back(num);
        break;
    }
}
all_vects.push_back(vect);
}

【问题讨论】:

  • 似乎问题在于input 不包含空格并且代码从那里走下坡路。
  • input 将为空,因为cin &gt;&gt; a; 离开换行符,该换行符将在那里结束来自getline 的输入。
  • 你希望input.back()+1 做什么?
  • @AlanBirtles 我删除了输入中的第一个数字。这是为了在一行中获取多个整数。

标签: c++ string visual-studio visual-studio-2012 assertion


【解决方案1】:

我在测试这段代码的时候发现n=-1需要提前判断。假设input。假设字符串input没有' ',那么n就会变成-1,而sub = input.substr(0, n);不成立。因此,向量vect 将为空。这就是string iterator + offset out of range会出现的原因。

以下是我对此代码的更改。你可以参考一下。

    if (n == -1) 
    {
        istringstream(input) >> num;
        vect.push_back(num);
        break;
    }
    else {
        sub = input.substr(0, n);
        istringstream(sub) >> num;
        vect.push_back(num);

        input = input.substr(n + 1, input.back() + 1);
        n = input.find(' ');
    }

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多