Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #define max_length 20
- struct Rules {
- char origin[10];
- char replacement[10];
- };
- int Count_Length(char* line, struct Rules* rules, int number_of_rules){
- int rule_index, new_length = 0;
- while (1) {
- char* pointer = line + strlen(line) + 1;
- for (int i = 0; i != number_of_rules; ++i) {
- if (strstr(line, rules[i].origin) != NULL && strstr(line, rules[i].origin) < pointer) {
- pointer = strstr(line, rules[i].origin);
- rule_index = i;
- }
- }
- if (pointer != line + strlen(line) + 1) {
- new_length += strlen(line) - strlen(pointer) + strlen(rules[rule_index].replacement);
- line = pointer + strlen(rules[rule_index].origin);
- } else {
- new_length += strlen(line);
- break;
- }
- }
- return new_length;
- }
- char* Transform_Line(char* line, struct Rules* rules, int number_of_rules){
- int new_length = Count_Length(line, rules, number_of_rules);
- char* new_line = (char*)malloc(new_length * sizeof(char));
- char* current_new_line_pointer = new_line;
- int rule_index = 0;
- while (1) {
- char* pointer = line + strlen(line) + 1;
- for (int i = 0; i != number_of_rules; ++i) {
- if (strstr(line, rules[i].origin) != NULL && strstr(line, rules[i].origin) < pointer) {
- pointer = strstr(line, rules[i].origin);
- rule_index = i;
- }
- }
- if (pointer != line + strlen(line) + 1) {
- strncpy(current_new_line_pointer, line, strlen(line) - strlen(pointer));
- current_new_line_pointer += strlen(line) - strlen(pointer);
- strncpy(current_new_line_pointer, rules[rule_index].replacement, strlen(rules[rule_index].replacement));
- current_new_line_pointer += strlen(rules[rule_index].replacement);
- line = pointer + strlen(rules[rule_index].origin);
- } else {
- strcpy(current_new_line_pointer, line);
- break;
- }
- }
- printf("%s\n", new_line);
- return new_line;
- }
- int main() {
- int n;
- char* line;
- printf("Please enter number of rules: ");
- scanf("%d", &n);
- struct Rules* rules = (struct Rules*)(malloc(n * sizeof(struct Rules)));
- printf("Enter rules: \n");
- for (int i = 0; i != n; ++i){
- scanf("%s%s", rules[i].origin, rules[i].replacement);
- }
- printf("Enter line to transform:\n");
- scanf("%s", line);
- for (int i = 0; i != 5; ++i){
- line = Transform_Line(line, rules, n);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement