大神们看看,这个while中的j+=2;错在那儿
程序代码:#include<iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
int i=0;
int j=0;
int k;
char a;
char s[3];
char str[2000];
char ss[]="亚";
ifstream file("实验文本.txt");
while(!file.eof())
{
str[i++]=file.get();
};
str[i]='\0';
while(str[j]!='\0')
{
if(str[j]<0)
{
s[0]=str[j];
s[1]=str[j+1];
s[2]='\0';
cout<<s<<endl;
if(!strcmp(ss,s))
{
k=j;
cout<<"找到相应汉字且位置为"<<k<<endl;
}
j++;
if (j!=i)
j++;
}
else
j++;
}
system("pause");
}
上面是能正确运行的程序,环境VC6.0大神们看看,为什么我把红色代码
j++;
if (j!=i)
j++;
这句改成
j+=2;
就不能成功终止循环呢?一直显示“烫”,不知道运行了多久,然后显示“$",停止了。
例如,对于这样的文件
ddwdawdwad你好亚洲dawdawda
按理说,前面都是j++,然后指向“你”,之后j+=2,指向“好”,j+=2.....以此类推,到“洲”时,j+=2,正好指向“d”,后面都是j++,到'\0'时判断str[j]!='\0'不成立,终止循环。中文字符都是高低字节成对出现,j+=2为什么会出现越界的情况呢?
另外考虑,如果i=10,此时如果j=9,那么j指向的一定不是中文字符(如果是中文字符,肯定是指向高字节,那么还有个低字节在str[10]的位置,和假设矛盾),因此不会有j+=2;只能是j++,此后j=10,str[j]=='\0',终止循环。
逻辑是没有什么错,但为什么运行起来就是不对呢?望指教!!!!!









