一道字符串替换的题目。
题意:给你2*n组字符串,一个是规则,一个是替换的结果。
字符串的题目,确实麻烦,有些细节不处理好就是wa。
这里我提供1组数据
intput
1
abcdef
a
abcdef
1
ab
ababab
output
a
<empty line>
1 #include2 #include 3 #include 4 5 using namespace std; 6 7 int next[100][300]; 8 char rule[100][100],rep[100][300],ans[300],tmp[300]; 9 10 void makenext(int i) //kmp求next数组。 11 { 12 int q,k; 13 int m = strlen(rule[i]); 14 next[i][0] = 0; 15 for (q = 1,k = 0; q < m; ++q) 16 { 17 while(k > 0 && rule[i][q] != rule[i][k]) 18 k = next[i][k-1]; 19 if (rule[i][q] == rule[i][k]) 20 { 21 k++; 22 } 23 next[i][q] = k; 24 } 25 } 26 27 void clea() 28 { 29 memset(rule,0,sizeof(rule[0])); 30 memset(rep,0,sizeof(rep[0])); 31 memset(next,0,sizeof(next[0])); 32 memset(tmp,0,sizeof(tmp)); 33 memset(ans,0,sizeof(ans)); 34 } 35 36 int main() 37 { 38 int n; 39 while(scanf("%d",&n),n!=0) 40 { 41 clea(); 42 getchar(); 43 for(int i=0;i 0&&ans[j]!=rule[i][q]) 56 q=next[i][q-1]; 57 if(ans[j]==rule[i][q]) 58 q++; 59 if(len3==q) 60 { 61 memset(tmp,0,sizeof(tmp)); 62 for(int m=0;m<=len-len3+len2;m++) //替换。这里处理相对麻烦,尤其是等号的问题。 63 { 64 if(m<=j-q) tmp[m]=ans[m]; 65 else if(m<=j-q+len2){ 66 for(int p=0;p