复习PAT的时候,看到求最长公共子序列的代码,其中有这么几行代码:
char A[N];
gets(A+1);//从下标为1开始读入
int lenA=strlen(A+1);//由于读下标从1开始,因此读取长度也从+1开始
这样,当要遍历A中所有字符的时候,需要写以下代码:
for(int i=1;i<lenA+1;i++){
A[i]
}
重新测试了一些案例,发现有以下规律:
char A[N];
int a,b;//a,b可为任何int型整数,包括负数
gets(A+a);//A的第一个字符下标为a;
int lenA=strlen(A+b);//如果b>=a,那么lenA的数值就等于字符串A的真实长度减去(b-a),这说明lenA的数值是从A+b这个指针位置往后读取的字符个数,而A的第一个字符的指针是A+a;如果b<a,那么lenA的数值为0。
这时候,要想遍历A中所有字符,应该这么写:
for(int i=a;i<a+字符串真实长度;i++){
A[i];
}
如果b>=a,应该写成:
for(int i=a;i<a+lenA+b-a;i++)