> 2000/05/19 (金) 21:08:22 ▼ ◇ [mirai]> > while(p[i]){if(p[i]==a)p[i]=b;i++;}
> > do{if(*p==a)*p=b;}while(*(++p)!='\0);
> > for(;*p!='\0';p++)if(*p==a)*p=b;
> > while(*p&&(*p==a&&((*p=b)||1))&&p++);
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > for式が最短だなヽ(´ー`)ノ
> 解説キボン(;´Д`)
> > while(*p&&(*p==a&&((*p=b)||1))&&p++);
まず文字列の終端でなければ*pが真になって(*p==a&&((*p=b)||1))&&p++を実行
&&(*p==a&&((*p=b)||1))では*p==aが真なら&&((*p=b)||1)を実行
&&((*p=b)||1)では(*p=b)を実行して||1で無理やり真を返す
p++では文字列のアドレスがNULLに成るはず無いので真になり
ポインタをインクリメントしてwhileループを続行
参考:2000/05/19(金)21時03分52秒