問題です。
#include <stdio.h>
short X1(char *,char *,char *);
void X2(char *,short,short);
void X3(char *,short,char *);
void main(void)
{
char Str[][30]={"CDECDEGEDCDEC","CDE","AB"};
short Ret;
Ret=X1(Str[0],Str[1],Str[2]);
printf("Str[0] : %s\n", Str[0]);
printf("Str[1] : %s\n", Str[1]);
printf("Str[2] : %s\n", Str[2]);
printf("Ret : %d\n", Ret);
}
short X1(char *pStr1,char *pStr2,char *pStr3)
{
short Len1,Len2,Len3;
short Cnt1,Cnt2;
short Ret = 0;
for (Len1= 0;pStr1[Len1]!=0;Len1++);
for (Len2= 0;pStr2[Len2]!=0;Len2++);
for (Len3= 0;pStr3[Len3]!=0;Len3++);
if (Len1<Len2 || Len2==0) return Ret;
for (Cnt1=0; Cnt1<=Len1-Len2; Cnt1++){
for (Cnt2=0; Cnt2<Len2; Cnt2++){
if (pStr1[Cnt1+Cnt2]!=pStr2[Cnt2]) break;
}
if (Cnt2==Len2){
X2(pStr1,Cnt1+1,Len2);
X3(pStr1,Cnt1+1,pStr3);
Len1 += Len3-Len2;
Cnt1 += Len3-1;
Ret++;
}
}
return Ret;
}
void X2(char *pStr, short Pnt, short Num)
{
short Cnt, Len;
for (Len = 0; pStr[Len]!=0; Len++);
for (Cnt = Pnt+Num-1; Cnt<=Len; Cnt++){
pStr[Cnt-Num] = pStr[Cnt];
}
}
void X3(char *pDst, short Pnt; char *pSrc)
{
short SrcLen, DstLen;
short Cnt;
for (SrcLen=0; pSrc[SrcLen]!=0; SrcLen++);
for (DstLen=0; pDst[DstLen]!=0; DstLen++);
for (Cnt=DstLen-1; Cnt>=Pnt-1; Cnt--){
pDst[Cnt+SrcLen]=pDst[Cnt];
}
for (Cnt=0; Cnt<SrcLen; Cnt++){
pDst[Pnt+Cnt-1]=pSrc[Cnt];
}
pDst[DstLen+SrcLen]=0;
}
というようなプログラムの出力結果はどうなるか?という問題ですが、Str[0]:ABABGEDABC, Str[1]:CDE, Str[2]:AB, Ret:3となるんですが、どうしてそうなるかが、全然分かりません。どなたか説明してもらえないでしょうか?お願いします。
お礼
BLUEPIXYさん、即レスありがとうございます。 大変助かりました。