我有这段代码:
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
在std::out_of_range
行的string::at
上导致if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;
错误。
我尝试了debbuging并在循环中添加了两行来查看正在发生的事情。结果:
0 1
aa
1 2 ab
2 3
ba
0 1
aa
1 2
aa
2 3
ab
0 1
aa
1 2
ab
2 3
ba
0 1
bb
1 2
ba
2 3
AA
请看最后两行 - 它确切地显示了下一行的计算不存在!当然,我试图寻找&#34;愚蠢的&#34;错误和小调试,但没有任何结果exepct,你可以看到上面。请帮我处理。
答案 0 :(得分:0)
首先,你不能像你那样为数组分配内存。在wiersze[n]
变量中,n必须在编译时知道,但在这里它不是。您必须动态初始化数组:
string* wiersze = new string[n];