当前位置: 首页> 文旅> 艺术 > B3674 [语言月赛202210] 标题修改

B3674 [语言月赛202210] 标题修改

时间:2025/7/13 13:13:58来源:https://blog.csdn.net/m0_46192147/article/details/139290949 浏览次数:0次

[语言月赛202210] 标题修改

题目描述

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

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

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

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

举例:对单词 apple \texttt{apple} apple

  • 第一个字母为 a \texttt{a} a
  • 第二个字母为 p \texttt{p} p
  • 第三个字母为 p \texttt{p} p
  • 第四个字母为 l \texttt{l} l
  • 第五个字母为 e \texttt{e} e

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

输入格式

输入一行一个字符串 S S S

输出格式

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

样例 #1

样例输入 #1

i like eat apple

样例输出 #1

I LiKe EaT ApPlE

提示

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

如果想要使用 char 数组对整个 S S S 进行存储,将数组大小调整至 2 × 1 0 6 2 \times 10 ^ 6 2×106 以上即可。

方法1
解题思路:

本题要求我们对给定的标题字符串 S S S 进行修改,将每个单词中的奇数位置字母改成大写,偶数位置字母改成小写。我们可以按照以下步骤解决:

  1. 定义一个布尔变量 isOdd,用于标记当前字母的位置是奇数还是偶数。初始值为 true,表示第一个字母的位置是奇数。
  2. 遍历字符串 S S S 的每个字符:
    • 如果当前字符是空格,将 isOdd 重置为 true,表示下一个单词的第一个字母的位置是奇数。
    • 如果当前字符是字母:
      • 如果 isOddtrue,将当前字母转换为大写。
      • 如果 isOddfalse,将当前字母转换为小写。
      • isOdd 取反,表示下一个字母的位置与当前字母相反。
  3. 遍历完成后,得到修改后的标题字符串。

C++代码:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;string modifyTitle(string S) {bool isOdd = true;for (char& c : S) {if (c == ' ') {isOdd = true;} else {if (isOdd) {c = toupper(c);} else {c = tolower(c);}isOdd = !isOdd;}}return S;
}int main() {string S;getline(cin, S);string modifiedTitle = modifyTitle(S);cout << modifiedTitle << endl;return 0;
}

代码解释:

  1. 定义函数 modifyTitle,接受一个字符串 S 作为参数,用于修改标题。
  2. 在函数内部,定义一个布尔变量 isOdd,初始值为 true,表示第一个字母的位置是奇数。
  3. 使用范围循环遍历字符串 S 的每个字符 c
  4. 如果当前字符 c 是空格,将 isOdd 重置为 true,表示下一个单词的第一个字母的位置是奇数。
  5. 如果当前字符 c 是字母:
    • 如果 isOddtrue,使用 toupper 函数将当前字母转换为大写。
    • 如果 isOddfalse,使用 tolower 函数将当前字母转换为小写。
    • isOdd 取反,表示下一个字母的位置与当前字母相反。
  6. 遍历完成后,返回修改后的标题字符串 S
  7. main 函数中,使用 getline 函数读取一行输入,即标题字符串 S
  8. 调用 modifyTitle 函数,将标题字符串 S 作为参数传入,获取修改后的标题字符串 modifiedTitle
  9. 输出修改后的标题字符串 modifiedTitle

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 S S S 的长度。我们需要遍历字符串一次。
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间。

输入输出样例:

输入:

i like eat apple

输出:

I LiKe EaT ApPlE

该解决方案使用了一个布尔变量 isOdd 来标记当前字母的位置是奇数还是偶数。通过遍历字符串的每个字符,我们可以根据 isOdd 的值对字母进行大小写转换。遇到空格时,我们将 isOdd 重置为 true,表示下一个单词的第一个字母的位置是奇数。这样,我们就可以正确地修改每个单词中字母的大小写。

关键字:B3674 [语言月赛202210] 标题修改

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: