蓝桥杯 ALGO-110 字符串的展开(字符串)

【思路】:按照题意来就行。注意当p1=2时,字母串和数字串的区别。推荐使用string,采用replace函数替换就行,char[]移动大量数据。

【AC代码】:

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;

#define MAX 10000+5

int isLower(char c)
{
	if (c >= 'a' && c <= 'z')
		return 1;
	return 0;
}

int isNum(char c)
{
	if (c >= '0' && c <= '9')
		return 1;
	return 0;
}

void reverse(char repstr[])
{
	int i = 0;
	for (i = 0; i < strlen(repstr)/2; i++)
	{
		char temp;
		temp = repstr[i];
		repstr[i] = repstr[strlen(repstr)-1-i];
		repstr[strlen(repstr)-1-i] = temp;
	}
}

int main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	int p1 = 0, p2 = 0, p3 = 0, i = 0, j = 0, k = 0;
	string str;

	//input
	cin >> p1 >> p2 >> p3;
	cin >> str;

	//handle
	for (i = 1; i < str.length()-1; i++) //注意范围
	{
		if ('-' == str[i])
		{
			int flag = 0;
			char repstr[MAX];
			if (isLower(str[i-1]) && isLower(str[i+1]) && str[i+1]>str[i-1])
				flag = 1;
			else if (isNum(str[i-1]) && isNum(str[i+1]) && str[i+1]>str[i-1])
				flag = 2;
			 if (0==flag)
			 	continue;

			//replace p1 p2
			int cnt = 0;
			for (j = str[i-1]+1; j < str[i+1]; j++)
			{
				for (k = 0; k < p2; k++)
				{
					if (1 == p1)
					{
						repstr[cnt++] = j;
					}
					else if (2 == p1)
					{
						if (1 == flag)
							repstr[cnt++] = j+'A'-'a';
						else if (2 == flag)
							repstr[cnt++] = j;
					}
					else if (3 == p1)
					{
						repstr[cnt++] = '*';
					}
				}
			}
			repstr[cnt] = '\0';

			//p3
			if (2 == p3)
				reverse(repstr);

			//replace
			string rep = repstr;
			str.replace(i, 1, rep);
		}
	}

	//output
	cout << str;
	return 0;
}

备注:

1.C++string类常用函数

2. string
与char* char[]之间的转换

时间: 2024-12-25 18:56:35

蓝桥杯 ALGO-110 字符串的展开(字符串)的相关文章

蓝桥杯——基础练习之FJ的字符串

问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "ABACABADABACABA" - - 你能找出其中的规律并写所有的数列AN吗? 输入格式 仅有一个数:N ≤ 26. 输出格式 请输出相应的字符串AN,以一个换行符结束.输出中不得含有多余的空格或换行.回车符. 样例输入 3 样例输出 ABACABA public static void main(

蓝桥杯 algo——6 安慰奶牛 (最小生成树)

问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计 划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间.没有两个牧场是被一条以上的道路所连接.奶牛们非常伤心,因为她们的交通

NOIP2007字符串的展开

NOIP2007的第二道题目,个人感觉就是暴力去跑模拟就好了,数据范围是允许我们这样去跑程序的 题目简述:题目中会给你 三个关键字p1,p2,p3,对于不同的关键字会对你的程序提出要求,接下来会给你一个字符串,其中包含a-z,A-Z,0-9,以及减号-,我们需要做的就是按p1,p2,p3的要求对于“-”进行展开其中p1,p2,p3的具体要求如下: (1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII 码的顺序,减号右边的字符

noip200706字符串的展开

试题描述: 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”.在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活.具体约定如下: (1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右

洛谷 P1098 字符串的展开(NOIp2007提高组T2)

题目描述 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h"或者"4-8"的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为"defgh"和"45678".在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活.具体约定如下: (1) 遇到下面的情况需要做字符串的展开:在输入的字

字符串的展开

30:字符串的展开    总时间限制:1000ms  内存限制:65536kB描述    在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”.在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活.具体约定如下:    (1) 遇到下面的情况需要做字符串的展开:在输入的字符串

洛谷 P1098 字符串的展开

题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”.在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活.具体约定如下: (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右

HDU 1274 展开字符串 (递归+string类)

题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<stdio.h> #include<iostream> #include<string.h> #include<string> using namespace std; char str[300]; bool vis[300]; int len; string dfs(i

Luogu P1098 字符串的展开

一道很麻烦的模拟题. /* P1098 字符串的展开 * Au: GG */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> using namespace std; char s[103]; int n, p

AC日记——字符串的展开 openjudge 1.7 35

35:字符串的展开 总时间限制:  1000ms 内存限制:  65536kB 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”.在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活.具体约定如下: (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了