首页 > 其他分享 >SP1163 题解

SP1163 题解

时间:2022-08-25 00:14:01浏览次数:83  
标签:SP1163 int 题解 len 报错 情况 false

题目传送门

小学生又来写题解啦!

本题显然是字符串模拟,认真维护好每个要求即可。

首先先判断是情况一还是情况二,如果同时出现,输出报错信息。

我们可以用一个函数实现上述功能。

若是情况一,枚举下划线位置,再加以判断是否报错。

若是情况二,枚举大写字母位置

若什么情况都不是,直接输出原字符串。

其中关于报错的细节在代码中会说明。

满分代码:

#include <iostream>
#include <cstdio>
using namespace std;
string s;
int len;
int find_op() //寻找属于哪种情况。 
{
	bool a = false, b = false;  
	for (int i = 0; i < len; i++) 
		if (s[i] == '_') //有情况一。 
		{
			a = true;
			break;
		}
	for (int i = 0; i < len; i++) 
		if ('A' <= s[i] && s[i] <= 'Z')  //有情况二。 
		{
			b = true;
			break;
		}
	if (a && b) return -1;  //情况共存,爆掉。 
	if (a) return 1;
	if (b) return 2;
	return 3;  //啥情况都没有。 
}
void calc(int t)
{
	if (t == -1) 
	{
		printf("Error!\n");
		return;
	}
	else if (t == 1)
	{
		if (s[0] == '_' || s[len-1] == '_')     //若首尾是下划线,爆掉。 
		{
			printf("Error!\n");
			return;
		}
		string ans = ""; 
		for (int i = 0; i < len; i++)
		{
			if (s[i] == '_')
			{
				if ('a' <= s[i+1] && s[i+1] <= 'z') //后一个得是小写字母。 
				{
					ans += s[i+1] - 'a' + 'A';
					i++;	//作用为跳过下一个字符。 
				}
				else
				{
					printf("Error!\n");      //不是小写字母,爆掉。 
					return;
				}
			}
			else ans += s[i];
		}
		cout << ans << endl;
	}
	else if (t == 2)
	{
		if ('A' <= s[0] && s[0] <= 'Z')        //首位是大写字母,爆掉。 
		{
			printf("Error!\n");
			return;
		}
		for (int i = 0; i < len; i++)
		{
			if ('A' <= s[i] && s[i] <= 'Z') cout << "_" << (char)(s[i] - 'A' + 'a');  //大写转小写。 
			else cout << s[i];
		}	
		cout << endl;
	}
	else if (t == 3) cout << s << endl; 	//什么情况都没有。 
}
int main()
{
	while (cin >> s)   //处理多组数据。 
	{
		len = s.length();
		int t = find_op();
		calc(t);
	}
	return 0;
}

首发:2022-01-29 09:57:57

标签:SP1163,int,题解,len,报错,情况,false
From: https://www.cnblogs.com/liangbowen/p/16622756.html

相关文章

  • CF483A 题解
    题目传送门小学生又来写题解啦!刚看到范围,觉得不能枚举。仔细想一下,其实可以,因为第一组解应该离左边界较近,很快可以出答案。所以,我们可以尝试暴力枚举。最大公约数就用......
  • AT278 题解
    题目传送门小学生又双叒叕来写题解啦!我的思路是,先统计招牌与材料包中不同字母的数量。然后,枚举二十六个字母。对于每个字母,用招牌字母数除以材料包字母数,再向上取整。......
  • AT212 题解
    题目传送门小学生又双叒叕来写题解啦!翻了一下大家的代码,都好长好复杂,其实直接模拟就好了。先说一个巨坑:发现坐标与我们平时不同,所以进行修改。写一个函数,函数作用为找......
  • AT1578 题解
    题目传送门小学生又双叒叕来写题解啦!个人认为这题就考你的理解能力,因此,得先把题读懂。寿司就是01或10字符的组合,减少拆开寿司的次数,本质上就是保留完整的寿司。因......
  • AT4864 题解
    题目传送门显然是贪心题。对于每张优惠券,我们应该给当前最大的物品使用。如果使用普通的数组,每次都找最大值太慢了。因此,我们使用传说神器:优先队列。其他题解都没有说......
  • AT2286 题解
    题目传送门小学生又双叒叕来写题解啦!这题要用到因数个数定理,没学过的童鞋自己了解一下。由于和质数有关,我使用质数筛法。我使用较快的欧拉筛法算质数(想学就做这题)。事......
  • [HNOI2004] L 语言 题解(AC 自动机上 dp)
    前言:原版数据超弱,爆搜就能过(即洛谷里面80分的数据),在此不多说,这里讲的是正解。(如果不是正解我还敢写题解吗)唔······话说洛谷里的题解用的都有状压,蒟蒻表示这题不......
  • 【TPC附加赛YSTG】星坠比赛题解
    零、写在前面比赛地址本人比较菜,在这场接近提高组的模拟赛中获得了\(30+100+30+50=210\)的烂分事实上只要把暴力打足成绩一般就不会差但后来本人在Z......
  • LeetCode 重排链表算法题解 All In One
    LeetCode重排链表算法题解AllInOnejs/ts实现重排链表重排链表原理图解//快慢指针重排链表https://leetcode.com/problems/reorder-list/https://le......
  • ARC103E题解
    思路很奇怪(?)考虑是否合法的条件。注意到这个显然要求对称(即存在\(i\)必须存在\(n-i\)),如果不满足一定无解。然后比较显然的是\(1\)不存在和存在\(n\)都无解。然后......