uva 282 - Rename(字符串)

来源:互联网 发布:java互联网必读 编辑:程序博客网 时间:2024/06/07 10:33

题目链接:uva 282 - Rename

题目大意:给定一个命令行的重命名命令,最多包含一个‘*’,然后给定一些文件名,将该命令转换成若干个执行命令。

解题思路:因为最多一个‘*’,所以直接开头结尾匹配掉,再处理中间的即可。

#include <cstdio>#include <cstring>#include <string>#include <vector>#include <iostream>#include <algorithm>using namespace std;vector<string> g;string order, a, b;void solve () {    cout << order << " " << a << " " << b << endl;    for (int i = 0; i < g.size(); i++) {        int l = 0, r = a.length() - 1;        int gl, gr;        for (gl = 0; gl < g[i].length(); gl++) {            if (a[l] == g[i][gl])                l++;            else                break;        }        for (gr = g[i].length() - 1; gr >= 0; gr--) {            if (a[r] == g[i][gr])                r--;            else                break;        }        if (a[l] != '*' || a[r] != '*' || gl - gr > 1)            continue;        cout << "mv " << g[i] << " ";        int j;        for (j = 0; j < b.length() && b[j] != '*'; j++)            cout << b[j];        for (; gl <= gr; gl++)            cout << g[i][gl];        for (j = j + 1; j < b.length(); j++)            cout << b[j];        cout << endl;    }}int main () {    while (cin >> order) {        g.clear();        if (order != "end") {            g.push_back(order);            while (cin >> order && order != "end")                g.push_back(order);        }        while (cin >> order && order != "end") {            cin >> a >> b;            solve();        }        cout << endl;    }    return 0;}
0 0
原创粉丝点击