漏谷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分!!!