假设我有以下代码:
#include <iostream> // for printf()
#include <cstdlib> // for exit(), perror()
#include <fstream> // for ifstream
using namespace std;
int main(int argc, char *argv[])
{
if (argc!=2) {
// if argc is not 2, print an error message and exit
cerr << "Usage: "<< argv[0] << " inputFile" << endl;
exit(1); // defined in cstdlib
}
return 0;
int num = 0;
ifstream ifs;
ifs.open(argv[1]);
string line;
do{
getline(ifs, line);
cout<<line<<endl;
if(line == "duck"){num++;}
}while(!ifs.eof());
cout<<"There were"<<num<<"ducks in"<<argv[1]<< endl;
}
我想知道,为什么substring(i,i + 2)不会抛出indexoutofbound异常。因为我&lt; LEN-1。当访问索引i = len -2时,substring可以访问len -2,len -1和len;这里len应该导致异常。
答案 0 :(得分:0)
String.substring()在其第一个参数上包含,而在第二个参数上是独占的。这意味着在最后一次迭代中,当i = len-2时,aSub将仅等于len-2和len-1处的字符串。 len被排除在外,字符串只会被设置为字符串的最后两个字符