我正在开发一个C程序,程序语句如下:
给定一个字符串 S 和一个正长度的字符串列表 F1,R1,F2,R2,...,FN,RN,继续按顺序查找 Fi 在 S 中的出现(从左到右)并替换他们和里。所有字符串都超过字母 { 0, 1 }。搜索应该只考虑在之前的迭代中没有被替换的 S 的连续片段。算法的迭代不应覆盖该算法的任何先前替换。
输入样本:
你的程序应该接受一个文件名的路径作为它的第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个字符串,然后是一个分号,然后是一个逗号分隔的字符串列表。例如。
10011011001;0110,1001,1001,0,10,11
输出样本:
对于每一行输入,在替换完成后打印出字符串。例如。
11100110
例如:10011011001 => 10100111001 [将 0110 替换为 1001] => 10100110 [将 1001 替换为 0] => 11100110 [将 10 替换为 11] => 11100110
我的代码能够用 Rn 替换每个相应的 Fn,但它已经完成了之前的替换。如何只搜索那些没有被替换的 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 代码在这里