UVA-10115 Automatic Editing

2016-07-12

UVA - 10115 Automatic Editing

题目大意:根据给出的替换规则替换字符串,要按照规则顺序,整个字符串都找不到后才能进行下一个规则。

解题思路:通过strstr与strncpy的互相结合,将字符串进行分割,运用strcpy与strcat对结果进行拼接。

这题是对strstr与strncpy的初步认识,后面有一题需要对strstr与strncpy熟练掌握。例:UVA-10361 Automatic Poetry

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

int main () {
    int rule_num;
    while ( cin >> rule_num && rule_num != 0 ) {
        getchar();
        char rule[10000][10000];
        for (int i = 0; i < rule_num*2; i++)
            gets(rule[i]);
        char str[1000];
        gets(str);
        char nstr[1000];
        strcpy( nstr , str );
        for (int i = 0; i < rule_num*2; i += 2) 
            while ( strstr( nstr , rule[i] ) != NULL) {
                char f[1000];
                memset( f , '\0' , sizeof(f) );
                strncpy( f , nstr , strstr(nstr,rule[i])-nstr );//将字符串在规则前的部分储存在f数组中
                char b[1000];
                memset( b , '\0' , sizeof(b) );
                strncpy( b , strstr(nstr,rule[i])+strlen(rule[i]) , strlen(nstr) - (strstr(nstr,rule[i])-nstr) - strlen(rule[i]) );//将字符串在规则后的部分储存再b数组中    
                strcpy( nstr , f );
                strcat( nstr , rule[i+1] );
                strcat( nstr , b );
            }
        cout << nstr << endl;
    }
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值