>  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秒