洛谷B3674思路分享

102 阅读2分钟

漏谷B3674

整道题描述

题目描述

某 E 写了一篇文章,标题为字符串 S,由小写英文字符和空格组成。

某 E 恪守规范,因此,字符串 S 是由若干个单词组成的,单词之间由一个空格隔开。

编辑人员要求将单词中的字母的大小写做调整。具体的,对每个单词,编辑人员要求将每个单词中的第奇数个字母改成大写,第偶数个字母改成小写。

关于单词下标的定义:这里我们以 11 为起始下标。也就是说,对一个长度为 n 的单词,我们将字母从头到尾记作第一个、第二个、⋯⋯、第 n 个。

举例:对单词 apple

第一个字母为 a
第二个字母为 p
第三个字母为 p
第四个字母为 l
第五个字母为 e

某 E 要赶 ddl,请你帮她完成这个任务。

输入格式

输入一行一个字符串 S。

输出格式

输出一行一个字符串,代表修改后的标题。

输入输出样例

输入 #1

i like eat apple

输出 #1

I LiKe EaT ApPlE

说明/提示

对于 20% 的数据,∣1∣S∣=1;
对于另外 30% 的数据,标题仅由一个单词组成;
对于 100% 的数据,保证去除空格后的 S 长度≤106。

如果想要使用 char数组对整个 S 进行存储,将数组大小调整至 2×1062×106 以上即可。

整道题思路

1.输入一个字符串
2.按位遍历,注意单词规律
3.输出即可。

代码演示

#include<bits/stdc++.h>
using namespace std;
int main()
{
	/*
	1:*/
	string a;//创建一个字符串
	int j=1;
	getline(cin,a);//输入(带空格)
	for(int i=0; i<a.size();++i)//遍历不多说,遍历每一个
	
	{
		if(a[i]==' ') //判断单词之间的空隙
		{
			j=1;//计数初始化
			continue;
		}
		if(a[i]>='a'&&a[i]<='z'&&j%2==1) //奇数位,小化大
		{
			 a[i]=a[i]-'a'+'A';//小化大


		}

		else if(a[i]>='A'&&a[i]<='Z'&&j%2==0) //偶数位,大化小
		{
			 a[i]+=a[i]-'A'+'a';//大化小

		}
		j++;

	}
	cout<<a;//输出;
	return 0;
}

总结:这道题关键在于单词分隔,每个单词单独转换,否则只能得50分!!!