69,371
社区成员
发帖
与我相关
我的任务
分享
//重新编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除
void squeeze(char s1[],char s2[])
{
int i,j,k;
for(i=k=0; s1[i]!='\0'; i++)
{
////////////////////////////////////////////////////////////////
for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++)
;
if(s2[j] == '\0')
s1[k++] = s1[i];
}
/*
就是这一块
for循环以后加了一个分号,它是怎么运行的呢,怎么就可以把匹配的字符赋给了s1[k]呢
if()语句写的是当s2[j] == '\0'时才把s1[i]的值赋给s1[k],\0应该在字符串最后一个字符,如果这么写的话那s[i]的值不就赋不进去了吗?
我在底下自己写了一个循环,不知对不对
*/
///////////////////////////////////////////////////////////
s1[k] = '\0';
}
//自己写的函数
void squeeze(char s1[],char s2[])
{
int i,j,k;
for(i=k=0; s1[i]!='\0'; i++)
{
for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++)
if(s2[j] != '\0')
s1[k++] = s1[i];
}
s1[k] = '\0';
}
/*感觉这样写好理解,不知对不对*/
//重新编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除
void squeeze(char s1[],char s2[])
{
int i,j,k;
for(i=k=0; s1[i]!='\0'; i++)
{
////////////////////////////////////////////////////////////////
for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++)
; //分号表示什么都不做
if(s2[j] == '\0')
s1[k++] = s1[i];
}
/*
k表示的是s1中与s2相匹配的字符index..得到一个i,然后遍历s2[]中是否有等于s1[i]的数,如果有跳
出第二个循环,继续第一个循环,如果没有,则s1[K]=s[i]删掉了s1[K],即与s2[]相匹配的字符被删除
楼主耐心点看,找个例子多算算想一想...
*/
///////////////////////////////////////////////////////////
s1[k] = '\0';
}
void squeeze(char s1[],char s2[])
{
int i,j,k;
for(i=k=0; s1[i]!='\0'; i++)
{
////////////////////////////////////////////////////////////////
for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++)
;
if(s2[j] == '\0')
s1[k++] = s1[i];
}
/*
就是这一块
for循环以后加了一个分号,它是怎么运行的呢,怎么就可以把匹配的字符赋给了s1[k]呢
if()语句写的是当s2[j] == '\0'时才把s1[i]的值赋给s1[k],\0应该在字符串最后一个字符,如果这么写的话那s[i]的值不就赋不进去了吗?
我在底下自己写了一个循环,不知对不对
*/
///////////////////////////////////////////////////////////
s1[k] = '\0';
}
for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++)
;//这个地方的空语句主要是因为 for如果不加{}的话 就会只循环执行for第一条语句 这个在下面写了一个; 表示空语句 也就是让循环什么也不
//做一直查找到s2[j]=='\0'或者s2[j]==s1[i]
if(s2[j] == '\0')
s1[k++] = s1[i];