小甲鱼老师的例题看不懂,求助大佬!
/*定义外部函数delete_string()形参str为字符串
形参ch为需要删除的字符*/
void delete_string(char str[], char ch)
{
int i, j;
for(i=j=0;str !="\0";i++)
{
if(str != ch)
{
str = str;
}
}
str='\0';
}
功能是从str中删除指定的字符,我不理解str = str;这一句,以下是我的理解,希望各位大佬能够帮助小白找到错误。谢谢大佬。
比如str="asdfgh",ch='f',第一次执行到该句j=1,i=0,str='a',所以执行完该句str='a',这样str="aadfgh",第二次执行j=2,i=1,str='a',所以执行完该句str='a',这样str="aaafgh",一直循环下去,字符串str都会变成a,怎么实现删除功能呢?希望各位大佬帮忙,指出我的错误,谢谢大佬!! 你在程序里面测试下,看能不能删除 本帖最后由 迷雾少年 于 2019-8-15 21:46 编辑
我不理解str = str;这一句
比如str="asdfgh",ch='f',第一次执行到该句j=1,i=0,str='a',所以执行完该句str='a',这样str="aadfgh",第二次执行j=2,i=1,str='a',所以执行完该句str='a',这样str="aaafgh",一直循环
1.
str = str
等价
str = str
j++;
2.
比如str="asdfgh",ch='f'
当str!=f的时候 也就是前面三个字符asd的时候 i 和j都是一样的 一起增加
到str的时候 j不再增加 留在str = 'f' 这个位置 但是i增加
到str='g' (i==4)的时候 符合str!='f' 此时 str = 'g' 因为j还留在str的位置 所以str前面4个字符变成了asdg 然后到h的时候 str = 'h' j i又增加 然后不符合for 循环 这时候j刚好是5 str = 0作为字符串结尾 楼上说的是对的!简而言之,这个函数的功能就是替换。遇到需要删除的字符,把后一个字符赋值该字符,以达到删除的目的。
012D1424mov eax,dword ptr
{
str = str;
012D1427add eax,dword ptr
012D142Amov ecx,dword ptr
012D142Dadd ecx,dword ptr
012D1430mov dl,byte ptr
012D1432mov byte ptr ,dl
012D1434mov eax,dword ptr
012D1437add eax,1
012D143Amov dword ptr ,eax
}
反汇编后,可以看出 str=str ,可以看做str=str;j++; 楼主,问题解决了,请结帖!
页:
[1]