关于字符串的定位问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 00:30:48
关于字符串的定位问题
现有源代码如下:
其中while(flag)
{
post=i;
j=0;
while(a[i]&&b[j]&&a[i]==b[j])
{i++;j++;}
if(!(b[j]))
flag=0;
else
i=post+1;

}
是什么含义?

整个源文件如下:
#include <string.h>
#include <iostream.h>
void main()
{
char a[50],b[50];
int i=0,j,post;
bool flag=1;
cout<<"请输入字符串1";
cin>>a;
cout<<"\n";
cout<<"请输入字符串2";
cin>>b;
cout<<"\n";
while(strlen(a)<strlen(b))
{
cout<<"输入的字符串2过长!请重新输入:";
cin>>b;

}
cout<<"\n";
while(flag)
{
post=i;
j=0;
while(a[i]&&b[j]&&a[i]==b[j])
{i++;j++;}
if(!(b[j]))
flag=0;
else
i=post+1;

}
if(!flag)
cout<<"字符串2的位置:"<<post&

这段代码是检查字串2是否包含于字串1,如果包含,找出2在1的位置,就是说2从1的第几个字母开始。
while(a[i]&&b[j]&&a[i]==b[j]) 先算==再算&&,所以是判断a字串当前指针所只的字符跟b当前指针所只的字符是否相等,而且他们的值都不能为空,也就是判断是否到了字串的尾部'\0',如果不为空且相等,那么就判断下一个字符,直到确定b是a的子串,如果其中有一位不同,那么把指向b的位置j再指向开头即j=0,然后把秩序a的指向下一个位置i=post+1.

这段代码的含义是从字符串a中找到字符串b的位置(从0开始)。可惜,运行不稳定。比如:如果a=123456,b=123,那么输出字符串2的位置:0;如果a=123456,b=345,那么输出字符串2的位置:2。但是如果a=123456,b=21,那么变量flag不可能为0,也就是代码无法从外面的while语句跳出,陷入死循环。建议将外面的while语句条件判断改为:while(a[i] && flag)