c语言 for 的用法
发布网友
发布时间:2022-05-31 18:34
我来回答
共3个回答
热心网友
时间:2022-06-01 04:12
for(k=i=0;s[i];i++)
{ for(j=i-1;j>=0;j--)
if(s[i]==s[j]) break;
if(j<0) t[k++]=s[i];
}
第一次 i=0
s[i]是外层判断条件,只要s没结束就不是\n,就符合条件循环下去。
j=-1,但不满足j>=0条件,
所以不执行if(s[i]==s[j]) break;
执行if(j<0) t[k++]=s[i];其实质是t[0]=s[0],k++;就是将s第一个字符赋给了t第一个字符。
.
.
.
i=N 时
j=N-1,满足j>=0,执行if(s[i]==s[j]) break;这句是在判断当前s第N+1个字符s[i]是否与s之前的字符相同,
如果相同就直接跳出for循环,如果不同j--,执行if(s[i]==s[j]) break;判断 s[i]==s[j] 继续向前查找是否有与s[i]相同的字符。一旦找到也跳出。
这里就有两种情况:
第一种,该字符在之前已出现过,那么在
for(j=i-1;j>=0;j--)
if(s[i]==s[j]) break;
中通过遍历,总是能找到与之相同的字符也就跳出了,此时j值定满足j>=0,那么跳出后,由于j>=0,if(j<0) t[k++]=s[i];这句就无效了,意思就是,重复的字符不会记录在t中了。
第二种,该字符s[i]没有在之前出现过,那么在
for(j=i-1;j>=0;j--)
if(s[i]==s[j]) break;
中通过遍历,肯定找不到,这个循环会从j=N-1开始通过j--循环到j=-1,不满足j>=0条件而退出此for循环。
此后执行if(j<0) t[k++]=s[i];此时j=-1,满足条件,t[k++]=s[i];就是将该新出现的字符s[i]赋给t[k],同时k++,准备接受下一个从未出现的字符。
热心网友
时间:2022-06-01 05:30
#include "stdio.h"
main()
{
char s[81];
int hash[256]={0};
int i,j,k;
gets(s);
for(i=0;s[i];++i)
{
if(!hash[int(s[i])])
{
hash[int(s[i])]=1;
putchar(s[i]);
}
}
printf("\n");
}
热心网友
时间:2022-06-01 07:05
for(k=i=0;s[i];i++)表示k和i初始值为0的时候开始循环,循环内部代码执行完的时候i的值加1
for(j=i-1;j>=0;j--)你说的没错,所以i=0的时候这个循环执行0次,那为什么不直接从i=1开始呢?是为了给k赋初始值0,这样的代码很简洁。
t[k++]=s[i];在给t[]数组赋值的时候也在让k加1,这样就可以给每个t[]数组的成员赋值了,至于能赋值多少得看你那上边的break什么时候执行了,懂了吗?