Problem D: Automatic Editing

本文探讨了使用脚本命令自动执行字符串替换操作的过程,详细介绍了如何基于预定义规则序列化地修改文本内容,包括从查找字符串到替换字符串的整个流程,以及在编辑过程中可能出现的情况如重复使用规则和忽略大小写敏感性。

Problem D: Automatic Editing

Description
Text-processing tools like awk and sed allow you to automatically perform a sequence of editing operations based on a script. For this problem we consider the specific case in which we want to perform a series of string replacements, within a single line of text, based on a fixed set of rules. Each rule specifies the string to find, and the string to replace it with, as shown below.
Rule Find Replace-by
1. ban bab
2. baba be
3. ana any
4. ba b hind the g
To perform the edits for a given line of text, start with the first rule. Replace the first occurrence of the find string within the text by the replace-by string, then try to perform the same replacement again on the new text. Continue until the find string no longer occurs within the text, and then move on to the next rule. Continue until all the rules have been considered. Note that (1) when searching for a find string, you always start searching at the beginning of the text, (2) once you have finished using a rule (because the find string no longer occurs) you never use that rule again, and (3) case is significant.
For example, suppose we start with the line
banana boat
and apply these rules. The sequence of transformations is shown below, where occurrences of a find string are underlined and replacements are boldfaced. Note that rule 1 was used twice, then rule 2 was used once, then rule 3 was used zero times, and then rule 4 was used once.
Before After
banana boat babana boat
babana boat bababa boat
bababa boat beba boat
beba boat behind the goat
The input contains one or more test cases, followed by a line containing only 0 (zero) that signals the end of the file. Each test case begins with a line containing the number of rules, which will be between 1 and 10. Each rule is specified by a pair of lines, where the first line is the find string and the second line is the replace-by string. Following all the rules is a line containing the text to edit. For each test case, output a line containing the final edited text.
Both find and replace-by strings will be at most 80 characters long. Find strings will contain at least one character, but replace-by strings may be empty (indicated in the input file by an empty line). During the edit process the text may grow as large as 255 characters, but the final output text will be less than 80 characters long.
The first test case in the sample input below corresponds to the example shown above.
 
Input
 
The input contains one or more test cases, followed by a line containing only 0 (zero) that signals the end of the file. Each test case begins with a line containing the number of rules, which will be between 1 and 10. Each rule is specified by a pair of lines, where the first line is the find string and the second line is the replace-by string. Following all the rules is a line containing the text to edit. For each test case, output a line containing the final edited text. Both find and replace-by strings will be at most 80 characters long. Find strings will contain at least one character, but replace-by strings may be empty (indicated in the input file by an empty line). During the edit process the text may grow as large as 255 characters, but the final output text will be less than 80 characters long.

 

output

The first test case in the sample input below corresponds to the example shown above.
 
Sample Input
4
ban
bab
baba
be
ana
any
ba b
hind the g
banana boat
1
t
sh
toe or top
0
 
Sample Output
behind the goat
shoe or shop
 

解题思路:
字符串替换问题,不难
1、分别把需要置换的字符串 和 置换后的字符串存起来
2、利用循环进行置换,置换一次之后再回溯一次,直到没有可以置换的字符串后,再进行下个字符串的置换

#include <stdio.h>
#include <string.h>
#define M 20
 
char c_b1[M][M];                    //存须置换的字符串
char c_b2[M][M];                    //存置换成的字符串
 
int main()
{
    int m;
    int flag;
    char *pt,*p;
    char c[100],zz[100],ss[100];            //c为输入的字符数组,zz为操作中转,ss为得到的新的字符数组
    while (scanf("%d",&m)!=EOF)
    {
        if (m==0)
            break;                                      //0时结束
        getchar();
 
        for (int i=0; i<m; i++)
        {
            gets(c_b1[i]);
            gets(c_b2[i]);
        }
        gets(c);
        strcpy(zz,c);
        for (int i=0; i<m; i++)             //m种置换
        {
            flag = 0;
            pt=strstr(zz,c_b1[i]);
            if (pt!=NULL)
                flag=1;
            else
                continue;
            int j=0;
            for (p=zz; p!=pt; p++)      //存前一半部分
            {
                ss[j++] = *p;
            }
            ss[j]='';
            pt += strlen(c_b1[i]);      //后移,抛开不要的
            strcat(ss,c_b2[i]);         //把置换的放进来
            strcat(ss,pt);              //接入剩余的
            strcpy(zz,ss);              //放到zz中
            if (flag) i--;              //重新再来
        }
        printf("%sn",zz);
    }
    return 0;
}



由于给定的参考引用中未提及AutoEdit: Automatic Hyperparameter Tuning for Image Editing的相关内容,下面基于一般知识进行介绍。 AutoEdit是一种用于图像编辑的自动超参数调整技术,在图像编辑领域,超参数的选择对最终的图像编辑效果起着关键作用。传统上,这些超参数需要人工手动调整,这不仅耗费大量时间和精力,而且需要专业的知识和经验。AutoEdit旨在通过自动化的方式来解决这个问题。 它利用机器学习和优化算法,根据输入的图像特征和编辑目标,自动搜索和选择最佳的超参数组合。例如,在图像的色彩调整、对比度增强、锐化等操作中,AutoEdit可以根据图像的内容(如是否为风景、人物等)和用户期望的效果(如复古风格、写实风格等),自动确定合适的亮度、饱和度、锐化程度等参数值。 从技术实现角度,AutoEdit可能会使用到诸如遗传算法、粒子群算法等优化算法来在超参数空间中进行搜索,也可能会结合深度学习模型,通过对大量图像数据和对应的最佳超参数组合进行学习,从而能够对新的图像进行准确的超参数预测。 ```python # 以下是一个简单的伪代码示例,模拟AutoEdit的工作流程 import numpy as np def autoedit(image, editing_goal): # 初始化超参数空间 hyperparameter_space = { 'brightness': np.linspace(0.1, 2.0, 100), 'contrast': np.linspace(0.1, 2.0, 100), 'sharpness': np.linspace(0.1, 2.0, 100) } # 这里简单假设使用随机搜索来选择超参数 best_score = -np.inf best_hyperparameters = None for _ in range(100): current_hyperparameters = { 'brightness': np.random.choice(hyperparameter_space['brightness']), 'contrast': np.random.choice(hyperparameter_space['contrast']), 'sharpness': np.random.choice(hyperparameter_space['sharpness']) } # 模拟对图像进行编辑并评估效果 edited_image = edit_image(image, current_hyperparameters) score = evaluate_image(edited_image, editing_goal) if score > best_score: best_score = score best_hyperparameters = current_hyperparameters return best_hyperparameters def edit_image(image, hyperparameters): # 这里简单模拟图像编辑操作 return image def evaluate_image(image, editing_goal): # 这里简单模拟评估图像编辑效果 return np.random.rand() # 示例使用 image = np.random.rand(100, 100, 3) editing_goal = 'enhanced_color' best_hyperparameters = autoedit(image, editing_goal) print(best_hyperparameters) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值