私はCプログラムに取り組んでおり、プログラムステートメントは次のとおりです。
文字列Sと、正の長さの文字列のリストF1、R1、F2、R2、...、FN、RNが与えられた場合、SでのFiの出現(左から右)を順番に検索し、置き換えます。それらをRiと一緒に。すべての文字列はアルファベット{0、1}の上にあります。検索では、以前の反復で置換の対象になっていないSの連続部分のみを考慮する必要があります。アルゴリズムの反復は、アルゴリズムによる以前の置換を上書きしてはなりません。
入力サンプル:
プログラムは、最初の引数としてファイル名へのパスを受け入れる必要があります。このファイルの各行は1つのテストケースです。各テストケースには、文字列、セミコロン、コンマ区切りの文字列のリストが含まれます。
10011011001; 0110,1001,1001,0,10,11
出力サンプル:
入力の各行について、置換が行われた後に文字列を出力します。
11100110
例:10011011001 =>10100111001[0110を1001に置き換える]=>10100110[1001を0に置き換える]=>11100110[10を11に置き換える]=>11100110
私のコードは、対応するすべてのFnをRnに置き換えることができますが、以前に行われた置き換えを上書きしています。交換されていないSの連続部分のみを検索する方法。私は次のように検索と置換を行っています:
void string_sub(char s1[],char s2[],char s3[])
{
char r[200];
printf("\n%s %s %s\n",s1,s2,s3);
int i,j,k,x,y;
char res[100];
int len1=strlen(s1);
int len2=strlen(s2);
int len3=strlen(s3);
j=0;
i=0;
while(i<len1)//searching for string 2 in string 1
{
if(s2[j]==s1[i])
{
j++;
i++;
if(j==len2)
{
y=i;
x=i-len2;
break;
}
}
else
{
if(s2[0]!=s1[i])
i++;
j=0;
}
}
k=0;
for(i=0;i<x;i++)
{
r[k]=s1[i];
k++;
}
for(i=0;i<len3;i++)
{
r[k]=s3[i];
k++;
}
i=y;
while(i<len1)
{
r[k]=s1[i];
k++;
i++;
}
r[k]='\0';//resultant string into r
k=0;
for(i=0;i<strlen(r);i++)//copying resultant string to s1
{
s1[k]=r[i];
k++;
}
s1[k]='\0';
}
私のCコード全体はここにあります