string.at()导致Std::out_of_range错误

std::out_of_range error caused by string.at()

本文关键字:out range 错误 of Std at 导致 string      更新时间:2023-10-16

我已经得到了这个代码:

int n,m; // n - rows count , m - columns in each row count
cin >> n >> m;
string wiersze[n];
int wynik=0;
for(int i = 0; i < n;i++)
{
    cin >> wiersze[i];
}
for(int i = 0; i < n;i++)
{
    for(int j =0; j<m-1;j++)
    {
        cout << j << " " << j+1<<endl; // debbuging line 
        cout<<wiersze[i].at(j)<<wiersze[i].at(j+1)<<endl;   // debbuging line       
        if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;
    }
}

当字符串中有两个字母时,我应该增加变量wynik。我不知道为什么,但是在这个例子中运行代码:

4 4

aaba

aaab

aaba

bbaa

导致if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;string::at上的std::out_of_range错误。

我试着调试并在循环中添加了两行来看看发生了什么。结果:

0 1

aa

1 2 ab

3

英航

0 1

aa

2

aa

3

ab

0 1

aa

2

ab

3

英航

0 1

bb

2

英航

2

3

aa

请看最后两行——它确切地表明,通过计算下一行不存在!当然,我试图寻找"愚蠢的"错误和小的调试,但除了上面所示之外,没有任何结果。

首先你不能为数组分配内存。在wiersze[n]中,变量n必须在编译时已知,但在这里不是这样。你必须动态地初始化数组:

string* wiersze = new string[n];