10115 - Automatic Editing

题目:10115 - Automatic Editing


题目大意:将给定的字符串里出现的上面替换规则中相对前面的字符串,替换成规则中的字符串相应字符串,然后继续重头开始从头开始判断,有就替换,没有就换下一个替换规则;注意替换规则的字符串是按顺序来替换给定的字符串,只有当前一个字符串已经找不到相对应要被替换的字符时,下一个替换规则才开始;注意里面的用来替换的字符串可能为空;记得要初始化为全0,以防上次数据残留导致错误;


解题思路:用strstr找出现替换字符串的起始位置,用strcpy(char * 被赋值起始指针,char* 被复制起始指针)复制,控制被赋值起始指针,从而达到替换字符串的效果;

#include<stdio.h>
#include<string.h>


const int N = 260;
const int M = 12;
const int K = 85;
char * num = NULL;
char str[N];
char tmp[N];

struct RP {
	
	char data[2][K];

} rp[M];

int main() {

	int t, i, j;
	memset(rp, 0, sizeof(rp));
	memset(str, 0, sizeof(str));
	memset(tmp, 0, sizeof(tmp));
	while(scanf("%d%*c",&t) && t) {
			
			for (i = 0; i < t; i++) {
			
				gets(str);
				strcpy(rp[i].data[0] , str);
				memset(str, 0, sizeof(str));
				gets(str);
				strcpy(rp[i].data[1] , str);
				memset(str, 0, sizeof(str));
			}
			gets(str);
			
			for (i = 0; i < t; i++) {
			
				while(true) {
			
			
						num = strstr(str, rp[i].data[0]);
						if(num == NULL) break;
						int l1 = strlen(rp[i].data[0]);
						int l2 = strlen(rp[i].data[1]);
						strcpy(tmp, num+l1);
						strcpy(num ,rp[i].data[1] );
						strcpy(num + l2,tmp);	
					}
				
							
			}

			puts(str);
			memset(str, 0, sizeof(str));
			memset(rp, 0, sizeof(rp));
			memset(tmp, 0, sizeof(tmp));
			num = NULL;
	}
	return 0;
}


你可能感兴趣的:(10115 - Automatic Editing)